在ASP
NET中
如果你使用了URL重寫
通過HttpContext
Request獲取到的是重寫後的地址
如果這個地址要返回給客戶端(比如Redirect)
我們一般希望是重寫前的友好地址
通常的使用場景是當我們有某個頁面需要用戶登錄才能訪問時我們會在代碼中判斷當前訪問用戶是否登錄如果未登錄則重定向至登錄頁面並將當 前網址通過Url參數傳遞給登錄頁面如果使用了URL重寫並通過RequestUrlAbsoluteUri獲取當前網址用戶登錄後打開的就是 重寫後的地址這雖然不影響正常使用但從用戶體驗及URL統一的角度我們更希望是重寫前的地址
之前我們在開發中也被這個問題困擾只能盡量通過js重定向至登錄頁面(通過locationhref獲取當前網址)或者在代碼中手動寫返回地址
現在我們找到了解決方法可以從RequestHeaders中找到重寫前的網址
)如果重寫組件用的是ISAPI_Rewrite則訪問被重寫的網址時Headers中會增加一項數據Key為XRewriteURL值為重寫前的網址
)如果重寫組件用的是IIS自帶的URL Rewrite模塊則Headers中增加的信息的Key為XOriginalURL
這樣我們就可以輕松獲取重寫前的網址示例代碼如下
復制代碼 代碼如下:
if (RequestHeaders["XRewriteURL"] != null)
{
ResponseWrite("http://" + RequestUrlHost + RequestHeaders["XRewriteURL"]);
}
else if (RequestHeaders["XOriginalURL"] != null)
{
ResponseWrite("http://" + RequestUrlHost + RequestHeaders["XOriginalURL"]);
}
From:http://tw.wingwit.com/Article/program/net/201311/14436.html