题
我有一个方法,这里我要重新定向的用户回到一个登录网页位于根的我的网应用程序。
我使用了下列代码:
Response.Redirect("~/Login.aspx?ReturnPath=" + Request.Url.ToString());
这不起作用。我的假设是,ASP.NET 会自动解决网址进入正确的路径。通常情况下,我只想使用
Response.Redirect("../Login.aspx?ReturnPath=" + Request.Url.ToString());
但这些代码被上的主页,并可以执行的的任何文件夹的水平。我如何获得围绕这一问题?
解决方案
我认为你需要删除的"~/"和替代它的只是"/",我相信是根
就停在那里! :-)除非你想来硬编码你的网页应用程序,所以它只能被安装在根源的一个网站。
"~/" 是 正确的事情来使用,但是原因,你的原始代码没有工作的预计是, ResolveUrl
(它是在内部使用 Redirect
)试图第一工作了,如果你的路径穿这是一个绝对的网址(例如"**http://server/**foo/bar.htm"而不是"foo/bar.htm"),但不幸的是这是通过简单地寻找一个结肠字':'URL你给它。但在这种情况下找到一个结肠在URL你给的 ReturnPath
查询串的价值,这傻瓜了-因此,你的'~/'没有得到解决。
该修正是那你应该将网址的编码 ReturnPath
值而逃逸有问题':'的任何其他的特殊人物。
Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.ToString()));
此外,我建议您(或)从来没有使用 Uri.ToString
-因为它给了一个人阅读,更多的"友好"的版本,网址不一定是正确的(它unescapes)。而不是使用Uri。AbsoluteUri-像这样:
Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.AbsoluteUri));
其他提示
你可以解决的第一URL 响应。Redirect("~/登录。aspx);并添加的参数之后,它得到了解决。
什么使用
Response.Redirect(String.Format("http://{0}/Login.aspx?ReturnPath={1}", Request.ServerVariables["SERVER_NAME"], Request.Url.ToString()));
不隶属于 StackOverflow