代码之家  ›  专栏  ›  技术社区  ›  Ben Hoffman

iis7中的自定义错误页是否应返回最初与之关联的错误状态代码?

  •  2
  • Ben Hoffman  · 技术社区  · 15 年前

    我正在尝试使用IIS7中使用重定向的自定义错误页。这是我的代码:

    <httpErrors>
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/Pages/NotFound" responseMode="ExecuteURL" />
    </httpErrors>
    

    就像你看到的那样 <remove statusCode="404" subStatusCode="-1" /> 重置状态代码,当我点击页面时,对于未找到的页面,状态代码为200。这真的是处理未找到页面的正确方法吗?

    我的理解是,即使我在我的站点内显示一个不存在的页面,我还是希望返回404个错误。我知道这是一个边缘案件,但我正在努力涵盖我的所有基地。

    我要重定向到的页面是.aspx页面,后面有C代码。在我的页面上:

    protected void Page_Load(object sender, EventArgs e)
            {
                Response.Status = "404 Not Found";
            } 
    

    不过,这段代码似乎并没有实际作用。是否有人对我是否应该返回404个错误有任何指导意见,如果有,如何做?谢谢。

    1 回复  |  直到 13 年前
        1
  •  1
  •   Geoffrey McGrath    13 年前

    当您对未找到页面的错误执行重定向时,Web服务器基本上会处理异常。你会得到一个200的回复,但只是一个很好的页面,上面写着:“嗨,你要找的不在这里。”如果没有重定向/自定义错误页面,浏览器将被留给自己的设备来查看404,并向最终用户显示某种类型的错误。此实例中可能会记录404错误,因为必须发生错误才能获得重定向。除非您有理由(即,未经授权的内容请求,您可能希望返回404而不是说未经授权),否则不需要更改响应代码。

    至于您的代码,应该是:

    Response.StatusCode = 404;
    

    但是,如果您在自定义404错误页上发送一个404错误,那么您将在IIS中进入一个疯狂的循环。404->自定义错误页(返回404)->自定义错误页(返回404)->等。