public class Global : System.Web.HttpApplication {
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
/// <summary>
/// 添加路由规则
/// </summary>
/// <param name="routes">路由集合</param>
public static void RegisterRoutes(RouteCollection routes)
{
routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));
routes.Add("webforms", new Route("{controller}/{action}.aspx", new RouteValueDictionary(new { controller = "Account", action = "ViewPage1" }), new RouteHandler()));
}
/// <summary>
/// 实现路由规则
/// 这里有俩种方式:第一种方式直接通过System.Web.Compilation.BuildManager来创建返回一个IHttpHandler;
/// 第二种方式将请求上下文交给一个继承自IHttpHandler的类来处理
/// </summary>
public class RouteHandler : IRouteHandler
{
#region IRouteHandler Members
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new PageHandler(requestContext);
//Route route = (Route)requestContext.RouteData.Route;
//string path = "/" + route.Defaults["Controller"] + "/" + route.Defaults["action"] + ".aspx";
//IHttpHandler hander = BuildManager.CreateInstanceFromVirtualPath(path, typeof(System.Web.UI.Page)) as IHttpHandler;
//return hander;
}
#endregion
}
public class PageHandler : IHttpHandler
{
public RequestContext requestContext { get; set; }
public PageHandler(RequestContext context)
{
this.requestContext = context;
}
#region IHttpHandler Members
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
Route route = (Route)requestContext.RouteData.Route;
RouteValueDictionary routeVale = requestContext.RouteData.Values;
string path = string.Format("/Views/{0}/{1}.aspx",
routeVale.ContainsKey("controller")
? route.Defaults["controller"]
: routeVale["controller"],
routeVale.ContainsKey("action")
? route.Defaults["action"]
: routeVale["action"]);
context.Server.Execute(path);
}
#endregion
}
}