Url解析
URL即:統一資源定位符 (Uniform Resource Locator, URL)
完整的URL由這幾個部分構成:
scheme://host:port/path?query#fragment
scheme:通信協定
常用的http,ftp,maito等
host:主機
伺服器(計算機)域名系統 (DNS) 主機名或 IP 位址。
port:端口号
整數,可選,省略時使用方案的預設端口,如http的預設端口為80。
path:路徑
由零或多個"/"符号隔開的字元串,一般用來表示主機上的一個目錄或檔案位址。
query:查詢
可選,用于給動态網頁(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技術制作的網頁)傳遞參數,可有多個參數,用"&"符号隔開,每個參數的名和值用"="符号隔開。
fragment:資訊片斷
字元串,用于指定網絡資源中的片斷。例如一個網頁中有多個名詞解釋,可使用fragment直接定位到某一名詞解釋。(也稱為錨點.)
對于這樣一個URL
http://www.x2y2.com:80/fisker/post/0703/window.location.html?ver=1.0&id=6#imhere
我們可以用javascript獲得其中的各個部分
1, window.location.href
整個URl字元串(在浏覽器中就是完整的位址欄)
本例傳回值: http://www.x2y2.com:80/fisker/post/0703/window.location.html?ver=1.0&id=6#imhere
2,window.location.protocol
URL 的協定部分
本例傳回值:http:
3,window.location.host
URL 的主機部分
本例傳回值:www.x2y2.com
4,window.location.port
URL 的端口部分
如果采用預設的80端口(update:即使添加了:80),那麼傳回值并不是預設的80而是空字元
本例傳回值:""
5,window.location.pathname
URL 的路徑部分(就是檔案位址)
本例傳回值:/fisker/post/0703/window.location.html
6,window.location.search
查詢(參數)部分
除了給動态語言指派以外,我們同樣可以給靜态頁面,并使用javascript來獲得相信應的參數值
本例傳回值:?ver=1.0&id=6
7,window.location.hash
錨點
本例傳回值:#imhere
URL的擷取很簡單,ASP.NET通用:
【1】擷取 完整url (協定名+域名+虛拟目錄名+檔案名+參數)
string url=Request.Url.ToString();
【2】擷取 虛拟目錄名+頁面名+參數:
string url=Request.RawUrl;
(或 string url=Request.Url.PathAndQuery;)
【3】擷取 虛拟目錄名+頁面名:
string url=HttpContext.Current.Request.Url.AbsolutePath;
(或 string url= HttpContext.Current.Request.Path;)
【4】擷取 域名:
string url=HttpContext.Current.Request.Url.Host;
【5】擷取 參數:
string url= HttpContext.Current.Request.Url.Query;
【6】擷取 端口:
Request.Url.Port
二、目前controller、action的擷取
RouteData.Route.GetRouteData(this.HttpContext).Values["controller"]
RouteData.Route.GetRouteData(this.HttpContext).Values["action"]
或
RouteData.Values["controller"]
RouteData.Values["action"]
如果在視圖中可以用
ViewContext.RouteData.Route.GetRouteData(this.Context).Values["controller"]
ViewContext.RouteData.Route.GetRouteData(this.Context).Values["action"]
ViewContext.RouteData.Values["controller"]
ViewContext.RouteData.Values["action"]