ASP.NET 404处理代码在本地但不在服务器上工作

时间:2012-12-04 06:11:14

标签: c# asp.net http-status-code-404

我在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错误。 这可能是主持人的错吗?谢谢。

2 个答案:

答案 0 :(得分:0)

是的可能。

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

答案 1 :(得分: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#而不是web.config文件实现了http-&gt; https开关,一切似乎都很好用。由于http-&gt; https开关是在Web上执行的,因此问题并未在本地显现。问题显然不是DiscountASP.NET的错,虽然我没理由为什么我不能使用customErrors标签重写规则。