91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET中怎么利用Routing處理請求

發布時間:2021-07-16 11:36:39 來源:億速云 閱讀:119 作者:Leah 欄目:編程語言

ASP.NET中怎么利用Routing處理請求,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

ASP.NET Routing是一個通用的組件,它不涉及到任何具體的請求處理方式。如果您需要,也可以自己基于它進行開發——如FubuMvc項目就是這么做的。
首先,如果您需要在項目中使用在ASP.NET Routing的功能,則需要在web.config文件中配置一個HttpModule:

      public static void RegisterRoutes(RouteCollection routes)          {    routes.IgnoreRoute("scripts/{*pathInfo}");   routes.IgnoreRoute("images/{*pathInfo}");   routes.MapRoute(   "Default", // Route name   "{controller}/{action}/{id}", // URL with parameters   new { controller = "Home", action = "Index", id = "" } // Parameter defaults   );   }

線程安全的),只不過我們平時不太會去這么做而已。值得注意的是,RouteCollections里的RouteBase對象,它們的順序是非常重要的。

UrlRouteModule會監聽ASP.NET Request Pipelines的PostResolveRequestCache事件,在這個事件中UrlRouteModule會將當前的HttpContext作為參數調用RouteTable.Routes集合的GetRouteData方法。在RouteCollection的GetRouteData方法中,又會依次將HttpContext傳入每一個RouteBase對象的GetRouteData方法,如果中途某個RouteBase對象返回了一個非null的結果,則這個結果便會直接返回給UrlRouteModule。

如果UrlRouteModule調用RouteTable.Routes.GetRouteData方法得到了null,則“一切都像沒有發生過”。如果GetRouteData方法得到了結果——一個RouteData對象,此時RouteData.Values便會包含請求中捕獲到的數據。RouteData中另一個重要的成員便是RouteData.RouteHandler屬性,它返回一個IRouteHandler對象。IRouteHandler接口中只有一個方法GetHttpHandler,它接受RequestContext作為參數,并返回一個IHttpHandler對象。如ASP.NET MVC框架在利用ASP.NET Routing時,便會使用MvcRouteHandler來返回一個MvcHandler對象。

不過,UrlRouteModule在得到了IRouteHandler對象之后,并不會直接調用其GetHttpHandler方法,而是判斷它是不是ASP.NET Routing自帶的StopRoutingHandler類型。StopRoutingHandler是個特殊的IRouteHandler對象,它的作用只是告訴UrlRouteModule,雖然某個規則匹配成功了,但是——也還是當什么都沒發生過吧。因此,如果我們想要“跳過”一些形式的請求,往往則需要將“忽略”功能放在其他所有規則之前。如:

public static void RegisterRoutes(RouteCollection routes)  {  routes.IgnoreRoute(" p {*pathInfo}?);< {resource}.axd name="UrlRoutingModule">

IgnoreRoute是定義在ASP.NET MVC中,基于RouteCollection類型的擴展方法。它會向RouteCollection中添加一個Route對象,而這個Route對象在匹配成功時返回的RouteData對象,其RouteHandler屬性便為一個StopRoutingHandler,于是余下的Routing規則也不會繼續匹配了——這一點和RouteBase對象返回null不同,因為如果返回null,則余下的規則還會依次匹配。如果返回了一個包含StopRoutingHander的RouteData,則剩下的Routing規則全部跳過。

如果UrlRouteModule得到的IRouteHandler對象不是StopRoutingHandler,則便會通過其GetHttpHandler方法獲得那個IHttpHandler對象。這個IHttpHandler對象會被放入HttpContext的Items集合中。至此,Request Pipeline的PostResolveRequestCache事件便結束了。

UrlRouteModule還會監聽PostMapRequest事件,此時Module便會查找HttpContext.Items集合的特定位置中是否包含一個IHttpHandler對象,如果存在,則會將這個對象設為當前HttpContext對象的Handler屬性的值。于是當ASP.NET繼續執行下去時,便會調用這個Handler的ProcessRequest方法來處理請求了。

如果這個IHttpHandler對象是MvcHttpHandler,那么它便會從RouteData中獲取一些數據,構造Controller對象,執行Action等等。如果它是一個DynamicDataHandler,或是WebForm的HttpHandler,那么剩下的便是各自的模型的處理方式了。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定日县| 招远市| 民乐县| 开原市| 石家庄市| 南郑县| 灵山县| 宁都县| 阿荣旗| 商南县| 涪陵区| 镇沅| 佳木斯市| 腾冲县| 社会| 永定县| 洱源县| 长海县| 宜阳县| 石渠县| 札达县| 盐亭县| 平果县| 吉安县| 通州市| 阿拉尔市| 曲阳县| 富民县| 梅州市| 乌拉特中旗| 游戏| 文昌市| 东辽县| 永昌县| 盈江县| 砀山县| 鲁甸县| 五寨县| 凯里市| 宜兰县| 泰宁县|