1:现在Application_start中注册您写的路由模式代码如下:
void Application_Start(object sender, EventArgs e)
{
//注册所有的您设置的所有的路由规则,以便请求相应路径时去对应相应的规则,RouteTable类存储了所有规则的URL的路径,
//RouteTable.Routes的是一个集合RouteCollection,存储了所有的用户定义的路由规则,写在Application_Start方法中的原因是将所有的路由规则注册到程序中
RegisterRoutes(RouteTable.Routes);
}
public static void RegisterRoutes(RouteCollection routes)
{
//添加一个路由到程序中
//new Route("{page}.aspx", new MyRouteHandler())d的解析,"{page}.aspx",第一个参数是请求的路径,第二个参数是怎么样去处理这个请求。
//在这里是用MyRouteHandler去处理这个路由请求
//添加另一个路由
routes.Add("Default",
new Route("{category}/{action}.aspx",
new RouteValueDictionary(
new
{
file = "Default",
category = "home",
action = "index"
}), new MyRouteHandler()//这里定义一个routeHandler,要用这个handler去出来的的请求路径
)
);
}
2:定义一个RouteHandler来处理上面的请求路径
public class MyRouteHandler : IRouteHandler
{
#region IRouteHandler 成员
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
//返回一个请求的对象(IHttpHander),即请求的页面对象,在MyPage中得到当前请求对象信息,并处理请求路劲。
return new MyPage(requestContext);
}
#endregion
}
3:定义一个IHttpHandler的实现对象MyPage
public class MyPage : IHttpHandler
{
public RequestContext RequestContext { get; set; }
public MyPage(RequestContext context)
{
this.RequestContext = context;
}
#region IHttpHandler 成员
//处理请求的url方法,也就是去替换请求路径当中的相应的参数
public virtual void ProcessRequest(HttpContext context)
{
context.Server.Execute(string.Format("/{0}.aspx?category={1}&action={2}",
RequestContext.RouteData.Values.ContainsKey("file")
? RequestContext.RouteData.Values["file"].ToString()
: "default",
RequestContext.RouteData.Values.ContainsKey("category")
? RequestContext.RouteData.Values["category"].ToString()
: "",
RequestContext.RouteData.Values.ContainsKey("action")
? RequestContext.RouteData.Values["action"].ToString()
: "")
);
}
public bool IsReusable
{
get { return false; }
}
#endregion
}
4:并且在Web.config中system.webServer的节点下配置如下
<modules>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</modules>
<handlers>
<add name="MyPage" path="*" type="RouteSimple.IHttpHander.MyPage" verb="*"/>
</handlers>
做完以上路由配置,理论上说路由配置已经完成。
访问路径/a/b/Defaul.aspx就是访问Default.aspx?category=a&action=b的路径,但是我的运行程序时报如下错误,望有实现成功的帮忙解决,不胜感激!
错误页面: