我有一种方法,可以将用户重定向回位于web应用程序根目录下的登录页面.

我使用的代码如下:

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

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

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

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

推荐答案

我认为你需要go 掉"~/",改成"/",我相信/是词根

STOP RIGHT THERE!:-)除非你想硬编码你的web应用程序,这样它只能安装在网站的根目录下.

"~/"is正确使用的东西,但原始代码没有按预期工作的原因是ResolveUrl(Redirect在内部使用)试图首先确定您传递的路径是否是绝对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.绝对的,绝对的

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

Asp.net相关问答推荐

.NET 框架 3.5 和 TLS 1.2

如何在 IIS 上配置 Web Deploy 发布功能,以便开发人员可以发布?

如何使用 executeReader() 方法仅检索一个单元格的值

使用进程外会话状态的 ASP.NET 应用程序中的 SQL Server 连接问题

在每页级别增加 ASP.Net 超时

使用 IIS 的 ASP.NET 调试超时

倒带请求正文流

我应该如何在类和应用层之间传递数据?

aspx 文件中的 if 语句

.NET AJAX 调用 ASMX 或 ASPX 或 ASHX?

由 UpdatePanel 内 GridView 内的 LinkBut​​ton 触发的完整回发

ASP.NET 身份,需要强密码

IISExpress 找不到使用 Visual Studio 2013 运行 localhost 的 ssl 页面

压力测试 ASP.Net 应用程序

使用 NLog 在 ASP.NET Web API 2.1 中进行全局异常处理?

如何将代码中的变量调用到aspx页面

ModalPopupExtender OK 按钮单击事件未触发?

ASP.Net 哪个用户帐户在 IIS 7 上运行 Web 服务?

Application_End global.asax

在 ASP.NET 中使用 SecureString 有什么好处吗?