httpErrors errorMode =“详细”仅针对特定错误代码

时间:2011-09-24 13:38:40

标签: asp.net-mvc asp.net-mvc-3 iis-7 iis-7.5

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

<!-- Pass through Ajax Errors with status code 600 -->
  <httpErrors errorMode="Detailed" existingResponse="PassThrough">
      <error statusCode="600" path="/" />
  </httpErrors>
<!--End -->

上述代码段的问题在于,这适用于所有响应代码,因此即使代码因500内部服务器而失败,响应也会在没有IIS干扰的情况下通过。这会将我的内部Controller和View代码暴露给用户(如果偶然发生了一些我没有处理过的异常)。

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

2 个答案:

答案 0 :(得分:4)

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

Response.StatusCode = 600;
Response.TrySkipIisCustomErrors = true;

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

答案 1 :(得分:0)

在web.config中,我设置了这样的自定义错误部分:

<customErrors mode="On">
  <error statusCode="404" redirect="~/Home/NotFound"></error>
</customErrors>

然后在控制器中,我仍然将[HandleError]属性设置在我的控制器上方。所有未处理的异常都会转到共享中的正常错误页面。任何404错误都会转到NotFound页面。