上面介紹的是最簡單的一種定義方式。當然我們可以建立更復雜的規則。其中就包括設定規則的默認值以及設定規則的正則表達式。
UrlRouting高級應用
預計效果:
當我訪問/a/b.aspx時就會轉到Default.aspx?category=a&action=b在頁面上顯示
category:a
action:b
亦如果我訪問/chsword/xxxx.aspx就會轉到Default.aspx?category=chsword&action=xxxx就會顯示
category:chsword
action:xxxx
如果訪問/chsword/就會轉到 Default.aspx?category=chsword&action=index就會顯示
category:chsword
action:index
首先我建立一個Route
routes.Add(
"Default",
new Route("{category}/{action}.aspx",
new RouteValueDictionary(
new
{
file = "Default",
category = "home",
action = "index"
}), new MyRouteHandler()
)
);
當然IHttpHandler的處理方式也要有所改變
為了方便查看我使用了下方法:
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()
:"")
);
即/a/b.aspx是映射到Default.aspx?category=a&action=b
在Default.aspx中寫如下代碼:
category:<%=Request.Params["category"]%><br/>
action:<%=Request.Params["action"]%>
以顯示傳入的參數。
如果在IIS中設置Index.aspx時就算輸入/a/也會訪問到/a/index.aspx,即默認的會按RouteValueDictionary中設置的值自動補全