程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> urlMappings與URL映射,urlmappingsurl

urlMappings與URL映射,urlmappingsurl

編輯:關於.NET

urlMappings與URL映射,urlmappingsurl


此配置節的作用就是往Web程序中添加URL的映射,從而達到用戶訪問映射後的URL(如/Page/AAA)也能訪問到源URL(如/Page/PageAAA.aspx)的效果。這也是URL映射本來的作用。

詳細配置如下

其中要啟用這個URL映射的必須要把enabled設置成true,add和remove的url都是映射後的URL。

最開始鄙人是在WebForm中嘗試,結果是成功的;然後擔心在MVC下已經廢棄了,最開始可能是某些原因導致映射不了,直接說找不到URL,後來估計打斷點查看一下兩個應用程序(WebForm和MVC)的Application裡面都包含了UrlMappingsModule。再接著在MVC下嘗試,也不知啥原因就映射成功了。然而也發現實際上這個URL映射就是ASP.NET的HTTP管道裡面的這個模塊起的作用。

對於無知的我,讓我去實現一個UrlMappingsModuel實現映射的話,多半會利用HttpResponse的Redirt通過URL重定向來從表面實現上達到這個URL映射的效果。以前剛開始學習ASP.NET的時候就覺得HttpResponse的Redirt就是頁面跳轉,了解到Http協議的時候才發現這兩個還是有區別的。

先弄一個重定向的例子,有一個Action他是重定向到另一個Action——HelloWorld裡面

當訪問這個RedHelloWorld的時候,通過谷歌的開發者工具看到網絡請求是這樣子的

   

頁面最終是訪問到HelloWorld。可是這並非是請求RedHelloWorld的響應,其響應如上圖,狀態碼302表示重定向,通過Location裡面的"/Home/HelloWorld"字段來再次發起請求,最終顯示的頁面是HelloWorld的響應內容。

(這一下子成了在說HTTP協議的,檔次覺得降低了很多)

再看看URL映射的,在Web.Config中添加如下配置

訪問/Abc/aaa的時候呈現的是/Home/Index的內容,其響應頭是這樣子的200 OK

為此我也專門看了一下源碼,首先web.config裡面的配置肯定是由某個以Section為後綴的配置讀取類來獲取,那這裡的就是UrlMappingsSection。它讀取了整個映射信息後會把它們存放到一個以UrlMappingCollection為類型、名為UrlMappings的集合裡面

這個集合會在兩個地方被使用,一個是UrlMappingsModule,另一個是在ApplicationStepManager裡面。這個ApplicationStepManager的具體作用我就沒去認真探究,但通過HttpApplication裡面的一點代碼推測,這是在經典模式下使用的,另一個管道的應該是對應集成模式。這裡如果我說錯了其他大神可以拍磚,我非常樂意更改過來。

那說回UrlMappingsModule裡面的,他是注冊了HttpApplication的BeginRequest事件,每當有請求來的時候他都會把要請求的URL拿過去UrlMappings比對一下看存不存在映射,

   

如果存在了,那就調用HttpContext裡面的RewritePath方法去重寫這次請求的路徑,這個RewritePath是一個公共的方法

而對於HttpResponsed它就在響應頭裡面把狀態碼改成301或302,然後注明Location字段,下圖節選自HttpResponse的內部方法Redirect重載。

實際上還有另一種響應方式的,他是與WebForm那邊有關系的,在使用MVC的時候就用不著了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved