当前位置:  开发笔记 > 编程语言 > 正文

Response.Redirect使用~Path

如何解决《Response.Redirect使用~Path》经验,为你挑选了1个好方法。

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

我正在使用以下代码:

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

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

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

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



1> Duncan Smart..:

我认为你需要删除"〜/"并用"/"替换它,我相信/是根

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

"〜/" 正确使用的东西,但原始代码没有按预期工作的原因是ResolveUrl(在内部使用Redirect)尝试首先计算出你传递它的路径是绝对URL(例如"**http:// server /**foo/bar.htm"而不是"foo/bar.htm") - 但遗憾的是,只需在您提供的URL中查找冒号字符':'即可它.但是在这种情况下,它会在您在ReturnPath查询字符串值中给出的URL中找到冒号,这会使它变得愚蠢 - 因此您的'〜/'无法解析.

修复是你应该对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));

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有