上面介紹的是最簡單的一種定義方式。當然我們可以建立更復雜的規則。其中就包括設定規則的默認值以及設定規則的正則表達式。
UrlRouting高級應用
預計效果:
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
當然IHttpHandler的處理方式也要有所改變
爲了方便查看我使用了下方法:
即/a/b.aspx是映射到Default.aspx?category=a&action=b
在Default.aspx中寫如下代碼:
以顯示傳入的參數。
如果在IIS中設置Index.aspx時就算輸入/a/也會訪問到/a/index.aspx,即默認的會按RouteValueDictionary中設置的值自動補全
UrlRouting使用正則表達式規則
UrlRouting在定義的時候也可以按正則的規則來進行定義。
以上代碼規定了action只能是數字則訪問/a/1.chs可以正常訪問。
而訪問/a/b.chs則會顯示未找到資源。
當然這是裏可以使用更高級的正則表達式。
UrlRouting的技巧
排除UrlRouting的方法:
System.Web.Routing默認提供了一個IRouteHandler-StopRoutingHandler Class,經過它處理的URL不會被做任何處理
通常使用方法如下:
routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));
RouteHandler工廠:
其實IRouteHandler可以實現一個RouteHandler的簡單工廠。
規定HTTP verbs,這裏要使用System.Web.Routing中的HttpMethodConstraint
Demo程序代碼下載: