Response.Redirect 适用于 Visual Studio,但不适用于 IIS
Posted
技术标签:
【中文标题】Response.Redirect 适用于 Visual Studio,但不适用于 IIS【英文标题】:Resonse.Redirect works from VisualStudio but not from IIS 【发布时间】:2013-04-30 01:29:14 【问题描述】:我使用 asp.net HyperLink 创建了一个注销链接,其中 NavigateUrl="Default.aspx?Logout=1"。 在默认页面加载中,我检查查询字符串是否为空,如果不是,会话终止并且用户被重定向到同一页面,没有查询字符串,充当登录页面。
Default PageLoad 中的代码是:
if (Request.QueryString["Logout"] != null)
FormsAuthentication.SignOut();
Session.Clear();
Session.Abandon();
Response.Redirect("~/Default.aspx", true);
当它从 VisualStudio 运行时,它工作正常,但是当它从 IIS 运行时,我得到了 The resource cannot be found 错误。 说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。请求的 URL:/Default.aspx。
同一页面是程序的开始页面,在打开时调用它没有问题。 在调试中,我看到页面加载已激活并输入了 if,因此问题出在 Response.Redirect url 中。我试着去掉 ~/ 或只是 ~ 或做 ../ 或 /ProgramName//Default.aspx。没有任何效果。
编辑:我的错误,问题不在 LOAD 事件中。从 IIS 运行时,程序不会返回服务器,问题出在 HyperLink NavigateUrl。尝试改变它没有帮助。有什么想法吗?
【问题讨论】:
你在 unix 上运行你的网站吗? 如果将行替换为:Response.Redirect(Request.Url.GetLeftPart(UriPartial.Path), true);
,会发生什么?
@Aristos 我不知道。
我认为有两种情况。第一,文件系统区分大小写,文件是default.aspx,您将其称为Default.aspx,第二种情况是尝试从非安全页面进行第二次重定向(httpshttp)并且没有正确安装。
【参考方案1】:
if (Request.QueryString["Logout"] != null)
FormsAuthentication.SignOut();
Session.Clear();
Session.Abandon();
Response.Redirect("~/Default.aspx", false);
【讨论】:
以上是关于Response.Redirect 适用于 Visual Studio,但不适用于 IIS的主要内容,如果未能解决你的问题,请参考以下文章
代码行为类似于loopback4中的response.redirect吗?
Response.Write 和 Response.redirect 不可同时使用