c# route Response.Redirect使用〜Path




route api controller (2)

怎麼樣使用

Response.Redirect(String.Format("http://{0}/Login.aspx?ReturnPath={1}", Request.ServerVariables["SERVER_NAME"], Request.Url.ToString()));

我有一個方法,我想將用戶重定向到位於我的Web應用程序根目錄的登錄頁面。

我使用下面的代碼:

Response.Redirect("~/Login.aspx?ReturnPath=" + Request.Url.ToString());

這雖然不起作用。 我的假設是,ASP.NET會自動將URL解析為正確的路徑。 通常情況下,我只會使用

Response.Redirect("../Login.aspx?ReturnPath=" + Request.Url.ToString());

但是這個代碼在母版頁上,並且可以從任何文件夾級別執行。 我如何解決這個問題?


我認為你需要刪除“〜/”並用“/”替換它,我相信/是根

停在那兒! :-)除非你想硬編碼你的網絡應用程序,以便它只能安裝在網站的根目錄。

“〜/” 正確的使用方法,但是原來的代碼並沒有像預期的那樣工作的原因是ResolveUrlRedirect內部使用)試圖首先解決你傳遞它的路徑是絕對路徑URL(例如,“** http:// server / ** foo / bar.htm”而不是“foo / bar.htm”) - 但不幸的是,只需在URL中查找冒號“:”你給它。 但在這種情況下,它會在您在ReturnPath查詢字符串值中輸入的URL中找到一個冒號,這會愚弄它 - 因此您的“〜/”無法解析。

解決的辦法是,你應該URL編碼的ReturnPath值逃脫有問題的':'以及任何其他特殊字符。

Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.ToString()));

另外,我建議你(或者任何人)不要使用Uri.ToString - 因為它給出了一個人類可讀的,更“友好”的URL版本 - 不一定是正確的(它可以忽略不計)。 而是使用Uri.AbsoluteUri - 就像這樣:

Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.AbsoluteUri));




response.redirect