Response.Redirect使用〜路径
时间:2020-03-05 18:44:07 来源:igfitidea点击:
我有一种方法,可以将用户重定向到位于Web应用程序根目录的登录页面。
我正在使用以下代码:
Response.Redirect("~/Login.aspx?ReturnPath=" + Request.Url.ToString());
但是,这不起作用。我的假设是ASP.NET会自动将URL解析为正确的路径。通常我会用
Response.Redirect("../Login.aspx?ReturnPath=" + Request.Url.ToString());
但是此代码位于母版页上,可以从任何文件夹级别执行。我如何解决这个问题?
解决方案
回答
那使用呢
Response.Redirect(String.Format("http://{0}/Login.aspx?ReturnPath={1}", Request.ServerVariables["SERVER_NAME"], Request.Url.ToString()));
回答
I think you need to drop the "~/" and replace it with just "/", I believe / is the root
停在那儿! :-),除非我们想对Web应用程序进行硬编码,以便只能将其安装在网站的根目录中。
"〜/"是正确的用法,但是原始代码未按预期运行的原因是,ResolveUrl
(由Redirect
内部使用)会尝试首先确定所传递的路径是否正确它是一个绝对URL(例如," ** http://server/**foo/bar.htm"而不是" foo / bar.htm"),但不幸的是,它只是通过查找冒号':'来实现的。在我们提供的网址中。但是在这种情况下,它将在我们在" 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));