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的路徑,但是我的運行程式時報如下錯誤,望有實現成功的幫忙解決,不勝感激!
錯誤頁面: