熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET中獲取URL重寫前的原始地址

2013-11-13 10:37:37  來源: .NET編程 

  在ASPNET中如果你使用了URL重寫通過HttpContextRequest獲取到的是重寫後的地址如果這個地址要返回給客戶端(比如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"
]);
}

  題外話

  ISAPI_Rewrite與IIS的URL Rewrite模塊有個很小的區別卻給從ISAPI_Rewrite遷移至URL Rewrite帶來了很大麻煩比如對於這個網址ISAPI_Rewrite是用“/cmt /”進行匹配而URL Rewrite模塊卻用“cmt/”進行匹配相差一個斜槓卻造成遷移時要修改在ISAPI_Rewrite中寫的每一條正則表達式而且URL Rewrite還提供了從ISAPI_Rewrite導入規則的功能卻沒有考慮這種情況


From:http://tw.wingwit.com/Article/program/net/201311/14152.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.