0

我在 DiscountASP.NET 上托管我的网站。我最近在处理 404 错误时遇到了问题,因为没有向客户端发送 404 状态代码,而且我无法弄清楚它为什么突然启动。它曾经工作过。我尝试从一个简单的示例开始解决我的错误处理代码。我有两个页面,两者都存在:

404_start.aspx:此页面旨在模拟不存在的页面。

<%@ Page Language="C#" Debug="True" Strict="True" %>
<script runat="server">
public void Page_Load()
{
    Response.TrySkipIisCustomErrors = true;
    Response.StatusCode = 404;
    Response.Status = "404 Not Found";
    Server.ClearError();
    Server.Transfer("404_end.aspx");
}
</script>
<html>
<body>
Start
<br />Response.StatusCode:  <%=Response.StatusCode%>
<br />Response.Status:  <%=Response.Status%>
</body>
</html>

404_end.aspx:此页面旨在模拟用户看到的错误消息。

<%@ Page Language="C#" Debug="True" Strict="True" %>
<html>
<body>
End
<br />Response.StatusCode:  <%=Response.StatusCode%>
<br />Response.Status:  <%=Response.Status%>
<br />This is extra text to fix this bug in Internet Explorer:  http://queenofsubtle.com/404/?page_id=2158
<br />This is extra text to fix this bug in Internet Explorer:  http://queenofsubtle.com/404/?page_id=2158
<br />This is extra text to fix this bug in Internet Explorer:  http://queenofsubtle.com/404/?page_id=2158
<br />This is extra text to fix this bug in Internet Explorer:  http://queenofsubtle.com/404/?page_id=2158
</body>
</html>

所以起始页面重定向到结束页面,但 404 错误永远不会出现。Fiddler 说它是 302,然后是 200。但 404_end.aspx 页面实际上显示为“Response.StatusCode:404”。在本地,Fiddler 根据需要看到 404 错误。会不会是楼主的错?谢谢你。

4

2 回答 2

0

很可能是。

如果提琴手返回错误代码,应用程序将选择相同的。

于 2012-12-04T06:31:26.867 回答
0

我想我已经想通了。这是我的 web.config 文件的精简版:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <customErrors mode="On" defaultRedirect="~/error/default.aspx" redirectMode="ResponseRewrite">
      <error statusCode="404" redirect="~/error/404.aspx" />
    </customErrors>
  </system.web>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Redirect to HTTPS" stopProcessing="true">
          <match url=".*" />
          <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
            <add input="{HTTP_HOST}" pattern="192\.168\." negate="true" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}{PATH_INFO}" redirectType="SeeOther" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

似乎重写规则和 customErrors 正在交互。当我删除上面显示的重写规则(这意味着当用户请求 http 时强制使用 https)时,服务器再次开始返回 404 错误。所以我在 C# 中实现了 http->https 开关,而不是 web.config 文件,一切似乎都很好。由于在 Web 上执行了 http->https 切换,因此问题并未在本地表现出来。这个问题显然不是 DiscountASP.NET 的错,尽管我不知道为什么我不能使用带有 customErrors 标记的重写规则。

于 2012-12-08T18:56:28.553 回答