asp.net - IIS 7错误代码

标签 asp.net iis-7 error-handling custom-error-pages

我正在IIS 7上运行Sitefinity CMS网站。当我尝试返回404状态时,看到了一些奇怪的结果。

如果我转到如下网址:

www.mysitefinitywebsite.com/test.co.uk(我知道这是一个无效地址,但是有人将其输入了CMS)

由于上面的内容不是ASPX页面,因此我相信IIS使用以下代码处理了该错误:

    <httpErrors errorMode="Custom">
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/404.aspx" responseMode="ExecuteURL" />
    </httpErrors>

地址栏中的url保持不变,显示了我的自定义404页面(/404.aspx)页面,但是返回了HTTP状态代码200。

但是,如果键入以下URL:

www.mysitefinitywebsite.com/test.aspx-使用以下配置启动ASPX错误处理程序:
<customErrors mode="On" >
    <error redirect="~/Sitefinity/nopermissions.aspx" statusCode="403" />
    <error redirect="~/404.aspx" statusCode="404" />
</customErrors>

再次显示我的自定义404页面,但是地址栏中的网址更改为:

www.mysitefinitywebsite.com/404.aspx?aspxerrorpath=/test.aspx

而且奇怪的是,如果我检查Firebug,则为text.aspx返回302代码,然后为/404.aspx?aspxerrorpath=/test.aspx返回200状态。

我不完全了解这里发生的情况,似乎IIS根本不响应状态码-这是设计使然吗?似乎完全疯了!

如果是设计使然,那么解决该问题的唯一方法就是以编程方式返回正确的响应代码?

提前致谢
higgsy

最佳答案

当您使用<httpErrors>元素和executeUrl时,您正在提供动态内容。如果该内容未明确返回状态代码(asp.net,asp等页面),则需要根据需要将existingResponse属性设置为auto/replace/passthrough。

目的是Web服务器可能有一般性错误,您可能需要向客户端返回不同或扩展的错误代码。对于API,您可能希望404包含/返回有关未找到的内容的更多信息,等等,这更有意义。

看看httpErrors上的IIS.NET文档中的existingResponse标志

http://www.iis.net/ConfigReference/system.webServer/httpErrors

对于ASP.NET,默认行为是发生错误时重定向302,这是您所看到的。在您正重定向到的页面上,以编程方式设置响应的状态代码时,将返回404页面。

差异仅仅是由处理引起的。首先,您允许IIS在执行ASP.NET管道之前处理错误。在第二个中,IIS传递到ASP.NET管道。他们是两种不同的技术,因此有两种不同的行为。放心研究一下,您可以让他们俩都做同样的事情。

关于asp.net - IIS 7错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205212/

相关文章:

asp.net - Azure 应用服务 - 免费套餐 - Cpu 时间(短)

c# - 刷新 IIS 网络服务器上所有工作进程的 HttpRuntime.Cache 对象

c# - ASP.NET 网络服务

c# - 在实现自己的 IUserStore 时,类上的 "optional"接口(interface)实际上是可选的吗?

c# - 在 IIS 7.5 中重命名默认网站是否安全?

ruby-on-rails - 模型中的自定义验证

php - PHP将变量传递给register_shutdown_function- fatal error 处理程序

python - 如何处理 `MissingRequiredArgument`错误

asp.net - 需要帮助设置 ASP.net 3.5(截图)

asp.net-mvc - IIS 和 MVC 的授权问题