2011-10-14 33 views
0

我正在爲採用請求的URL的404頁面編寫catch-all操作方法,用正則表達式提取羅嗦的比特(\w+)*和將這些以空格分隔的位發送給搜索引擎以生成建議頁面的列表。當我嘗試在我的MVC中訪問它時,ServerVariables [「UNENCODED_URL」]爲空

問題是,ServerVariables["UNENCODED_URL"]在Action方法中似乎不可用。然而,其他服務器變量

我可以使用ServerVariables["URL"]連同ServerVariables["QUERY_STRING"],兩者都可用。但在某些情況下,這會遺漏可能包含有關用戶意圖的有效信息的部分網址。

例如,如果惡意形成的網址是

/test/007/words/something-with-a-dot.xyz/these-words-are-neglected/?stuff-in-querystring 

那麼「URL」和「QUERY_STRING」被發現爲"/test/007/words/something-with-a-dot.xyz""stuff-in-querystring"

「URL」忽略而直言一切什麼照顧就像一個文件擴展名。所以這還不夠。

那麼UNENCODED_URL怎麼了?
我怎樣才能得到它的等價物?

回答

1

您是否嘗試過HTTP_URL變量?看起來像從MSDN返回原始的編碼URL,例如「/vdir/default.asp?querystring」。

Source

而且 - 如果你在一個控制器的操作方法,你可以(?應該)使用的HttpContext到位SERVER [someProperty]的。例如:

var Url = HttpContext.Request.RawUrl; 

它返回當前請求的完整URL。

+0

就是這樣! - HttpContext.Request.RawUrl。順便說一句,我正在嘗試HttpContext.Request.ServerVariables [「UNENCODED_URL」],但在帖子中保持簡短。 – Faust

相關問題