33

我有一种方法,我想将用户重定向回位于我的 Web 应用程序根目录的登录页面。

我正在使用以下代码:

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

但这不起作用。我的假设是 ASP.NET 会自动将 URL 解析为正确的路径。通常,我只会使用

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

但此代码位于母版页上,可以从任何文件夹级别执行。我该如何解决这个问题?

4

3 回答 3

76

我认为您需要删除“〜/”并用“/”替换它,我相信/是根

停在那儿!:-) 除非您想硬编码您的网络应用程序,以便它只能安装在网站的根目录下。

"~/"正确的使用方式,但是您的原始代码未按预期工作的原因是ResolveUrl(由 内部使用Redirect)尝试首先确定您传递的路径是否是绝对 URL(例如“** http://server/ **foo/bar.htm”而不是“foo/bar.htm”) - 但不幸的是,它只需在您提供的 URL 中查找冒号字符 ':'它。但在这种情况下,它会在您在查询字符串值中提供的 URL 中找到一个冒号ReturnPath,这会欺骗它 - 因此您的 '~/' 没有得到解析。

解决方法是您应该对ReturnPath转义有问题的“:”以及任何其他特殊字符的值进行 URL 编码。

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));
于 2008-08-28T00:40:27.633 回答
0

您可以先解析URL Response.Redirect("~/Login.aspx); 并在解析后添加参数。

于 2018-10-11T21:30:32.987 回答
-2

怎么用

Response.Redirect(String.Format("http://{0}/Login.aspx?ReturnPath={1}", Request.ServerVariables["SERVER_NAME"], Request.Url.ToString()));
于 2008-08-27T20:48:11.933 回答