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 不可同时使用

Response.Redirect和Server.Transfer比较--(转)

asp怎样用response.redirect进行页面跳转

为啥这个response.redirect不起作用?

Response.Redirect 异常