System.Web.Routing入門(mén)及進(jìn)階
預(yù)計(jì)效果:
當(dāng)我訪問(wèn)/a/b.aspx時(shí)就會(huì)轉(zhuǎn)到Default.aspx?category=a&action=b在頁(yè)面上顯示
category:a
action:b
亦如果我訪問(wèn)/chsword/xxxx.aspx就會(huì)轉(zhuǎn)到Default.aspx?category=chsword&action=xxxx就會(huì)顯示
category:chsword
action:xxxx
如果訪問(wèn)/chsword/就會(huì)轉(zhuǎn)到 Default.aspx?category=chsword&action=index就會(huì)顯示
category:chsword
action:index
首先我建立一個(gè)Route
routes.Add(
"Default",
new Route("{category}/{action}.aspx",
new RouteValueDictionary(
new
{
file = "Default",
category = "home",
action = "index"
}), new MyRouteHandler()
)
);
當(dāng)然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中寫(xiě)如下代碼:
category:<%=Request.Params["category"] %><br />
action:<%=Request.Params["action"] %>
以顯示傳入的參數(shù)。
如果在IIS中設(shè)置Index.aspx時(shí)就算輸入/a/也會(huì)訪問(wèn)到/a/index.aspx,即默認(rèn)的會(huì)按RouteValueDictionary中設(shè)置的值自動(dòng)補(bǔ)全
UrlRouting使用正則表達(dá)式規(guī)則
UrlRouting在定義的時(shí)候也可以按正則的規(guī)則來(lái)進(jìn)行定義。
routes.Add(
"zz",
new Route("{category}/{action}.chs",
new RouteValueDictionary(
new {
file = "Default",
category = "home",
action = "1"
}),
new RouteValueDictionary(
new {
action = "[\\d]+"
}),
new MyRouteHandler()
)
);
以上代碼規(guī)定了action只能是數(shù)字則訪問(wèn)/a/1.chs可以正常訪問(wèn)。
而訪問(wèn)/a/b.chs則會(huì)顯示未找到資源。
當(dāng)然這是里可以使用更高級(jí)的正則表達(dá)式。
UrlRouting的技巧
排除UrlRouting的方法:
System.Web.Routing默認(rèn)提供了一個(gè)IRouteHandler-StopRoutingHandler Class,經(jīng)過(guò)它處理的URL不會(huì)被做任何處理
通常使用方法如下:
routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));
RouteHandler工廠:
其實(shí)IRouteHandler可以實(shí)現(xiàn)一個(gè)RouteHandler的簡(jiǎn)單工廠。
public class RouteHandlerFactory : IRouteHandler
{
string Name { get; set; }
public RouteHandlerFactory(string name){this.Name = name;}
#region IRouteHandler 成員
public IHttpHandler GetHttpHandler(RequestContext requestContext) {
if (this.Name == "mypage")
return new MyPage(requestContext);
if(this.Name="mypage1")
return new MyPage1(requestContext);
}
#endregion
}
規(guī)定HTTP verbs,這里要使用System.Web.Routing中的HttpMethodConstraint
void Application_Start(object sender, EventArgs e) {
RegisterRoutes(RouteTable.Routes);
}
public static void RegisterRoutes(RouteCollection routes){
string[] allowedMethods = { "GET", "POST" };
HttpMethodConstraint methodConstraints = new HttpMethodConstraint(allowedMethods);
Route reportRoute = new Route("{locale}/{year}", new ReportRouteHandler());
reportRoute.Constraints = new RouteValueDictionary { { "httpMethod", methodConstraints } };
routes.Add(reportRoute);
}
Demo程序代碼下載:
WebApplication3.rar
- ASP.NET組件System.Web.Optimization原理及緩存問(wèn)題詳解
- 無(wú)法將類型為“System.Web.UI.WebControls.HiddenField”的對(duì)象強(qiáng)制轉(zhuǎn)換為類型的錯(cuò)誤的解決
- System.Web.Routing入門(mén)及進(jìn)階
- NET Runtime Optimization Service 1101 錯(cuò)誤的解決方法
- ASP.NET MVC命名空間時(shí)引起錯(cuò)誤的解決方法
- ASP.Net中命名空間Namespace淺析和使用例子
- System.Web中不存在類型或命名空間名稱“Optimization”(是否缺少程序集引用?)
相關(guān)文章
ASP.NET 網(wǎng)站開(kāi)發(fā)中常用到的廣告效果代碼
在ASP.NET項(xiàng)目開(kāi)發(fā)中,會(huì)被要求添加廣告,有翻屏效果、有廣告輪流顯示、飄浮廣告、左側(cè)廣告、右側(cè)廣告等。2010-04-04ASP.NET與ASP互通COOKIES的一點(diǎn)經(jīng)驗(yàn)
ASP與ASP.NET互相整合時(shí),其中文COOKIES信息無(wú)法被互通共享,當(dāng)使用ASP.NET寫(xiě)入中文COOKIES信息后,使用ASP進(jìn)行讀取,讀出來(lái)的卻是亂碼,而非中文。2010-03-03Asp.net防重復(fù)提交機(jī)制實(shí)現(xiàn)方法
在Button或其他控件加上下面兩個(gè)屬性:UseSubmitBehavior="false"及OnClientClick設(shè)置控件為不可用即可,感興趣的朋友可以參考下哈2013-04-04.NET高級(jí)調(diào)試之sos命令輸出看不懂的處理方法
.NET高級(jí)調(diào)試屬于一個(gè)偏冷門(mén)的領(lǐng)域,國(guó)內(nèi)可觀測(cè)的資料比較少,所以很多東西需要你自己去探究源代碼,然后用各種調(diào)試工具去驗(yàn)證,下面通過(guò)本文給大家分享.NET高級(jí)調(diào)試之sos命令輸出的相關(guān)知識(shí),感興趣的朋友一起看看吧2024-03-03.NET5實(shí)現(xiàn)操作注冊(cè)表的方法
本文詳細(xì)講解了.NET5實(shí)現(xiàn)操作注冊(cè)表的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02使用asp.net改變網(wǎng)頁(yè)上圖片顏色比如灰色變彩色
要能在網(wǎng)站上改變圖片的顏色,比如灰色的變成彩色,彩色的變成灰色多好啊,下面是通過(guò)asp.net實(shí)現(xiàn)的,有需求的朋友可以參考下2014-08-08asp.net中不能在DropDownList中選擇多個(gè)項(xiàng) 原因分析及解決方法
不能在 DropDownList 中選擇多個(gè)項(xiàng),在前一步操作的過(guò)程中,已經(jīng)選擇了某個(gè)Item2012-10-10在ASP.NET使用JavaScript顯示信息提示窗口實(shí)現(xiàn)原理及代碼
在ASP.NET使用JavaScript顯示信息窗口,感興趣的朋友可以了解一下,本文將介紹詳細(xì)的操作步驟,希望對(duì)你的JavaScript知識(shí)鞏固有所幫助2013-01-01使用.NET Core創(chuàng)建exe應(yīng)用程序
這篇文章介紹了使用.NET Core創(chuàng)建exe應(yīng)用程序的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06ASP.NET MVC中將控制器分離到類庫(kù)的實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET MVC中將控制器分離到類庫(kù)的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2015-06-06