IIS7中的自定义错误页面是否应返回最初与它们关联的错误状态代码?

时间:2010-06-18 13:55:15

标签: c# .net-3.5 iis-7

我试图在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 个答案:

答案 0 :(得分:1)

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

至于你的代码,它应该是这样的:

Response.StatusCode = 404;

但是,如果您在自定义404错误页面上发送了404错误,那么您将在IIS中遇到一些疯狂的循环。 404 - &gt;自定义错误页面(返回404) - &gt;自定义错误页面(返回404) - &gt;等