我有一个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)。
答案 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页面。