httpErrors errorMode = "Detailed" 仅适用于特定错误代码

Jat*_*tin 3 asp.net-mvc iis-7 iis-7.5 asp.net-mvc-3

我有一个 asp.net MVC3 应用程序。在我的控制器中,我有一个 ajax 操作,它使用 Response.StatusCode = 600 设置自定义响应代码。我需要按原样传递响应,而无需 IIS 尝试查找自定义错误页面。我尝试使用以下代码让 IIS 不使用其自定义页面来响应状态 600。

<!-- Pass through Ajax Errors with status code 600 -->
  <httpErrors errorMode="Detailed" existingResponse="PassThrough">
      <error statusCode="600" path="/" />
  </httpErrors>
<!--End -->
Run Code Online (Sandbox Code Playgroud)

上述代码片段的问题在于,这适用于所有响应代码,因此即使代码因 500 Internal Server 而失败,响应也会按原样传递,而不会受到 IIS 干扰。这会将我的内部控制器和视图代码公开给用户(如果偶然发生一些我尚未处理的异常)。

那么,如何配置 web.config 仅当 response.statuscode 为 600(自定义)时才传递详细响应,并为其他错误(例如内部服务器错误 500)提供默认 IIS 自定义页面。

Dar*_*rov 5

如果您在集成管道模式下运行,您可以尝试将该TrySkipIisCustomErrors属性设置为 true:

Response.StatusCode = 600;
Response.TrySkipIisCustomErrors = true;
Run Code Online (Sandbox Code Playgroud)

这就是说,HTTP specification明确定义了响应 HTTP 状态代码不优于 5xx。所以这里的设置Response.StatusCode = 600;似乎很不寻常。您究竟想要实现什么目的?为什么规范中定义的标准 HTTP 响应代码无法覆盖您的场景?