2011-07-28 101 views
5

我有需要重新回到當前頁面減去任何查詢參數。Response.Redirect(Request.Url.AbsolutePath)總是「安全」嗎?

我剛剛發現Request.Url.AbsolutePath,看起來它只是提供了傳遞給Response.Redirect()的票。

它似乎在我的開發機器上工作沒關係。有誰知道任何潛在的問題重定向到這個屬性的價值?在所有情況下很難確認它是「安全」的。

回答

2

這可能是一個問題,如果你在內部「重寫」的URL。例如,用戶請求「/team.aspx」,但在內部您傳輸執行或將URL重寫爲「/page.aspx?id=137」。

就個人而言,我更喜歡使用Request.RawUrl(它始終是本地的),並且可以去除查詢字符串。

擺脫請求的主機部分不是問題,因爲HTTP重定向可以是絕對路徑(「/ foo/bar」)上的路徑,瀏覽器將保留協議,端口和主機名。

+0

我多次閱讀你的第一段,但仍然不太明白。如果用戶請求'/ team.aspx',那麼我希望'Request.Url.AbsolutePath'返回'/ team.aspx'。 '/ page.aspx?id = 137'從哪裏來? –

+0

@Marcelo - 但他不重寫網址。 – JonH

+0

Jonathan,如果使用任何形式的URL重寫AbsolutePath上的URL與RawUrl上的URL不是相同的。 RawUrl是通過HTTP請求發送的,它是用戶在瀏覽器上看到的內容。 –

0

我會使用Request.Url.OriginalString。

絕對路徑擺脫了URL的主機部分。

在此請看:http://wdevs.blogspot.com/2009/03/url-properties-of-request-to-aspnet.html

+0

但'OriginalString'包含查詢字符串。我知道我可以剝離它,但是重定向到Request.Url.AbsolutePath?有什麼問題?只要我重定向到同一個域,我不確定我是否理解這個問題。 –

+0

@JOnathan Wood - 誤讀你的文章,你是對的,你想做的事情沒有問題。如果你不想要實際的查詢參數,那麼使用'Request.Url.AbsolutePath' – JonH