【问题标题】:httpErrors errorMode = "Detailed" only for a specific error codehttpErrors errorMode = "Detailed" 仅针对特定错误代码
【发布时间】:2011-09-24 13:38:40
【问题描述】:

我有一个 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 -->

上述 sn-p 的问题在于,这适用于所有响应代码,因此即使代码因 500 内部服务器而失败,响应也会按原样通过,而不会受到 IIS 干扰。这会将我的内部控制器和视图代码暴露给用户(如果偶然发生了一些我没有处理的异常)。

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

【问题讨论】:

  • 尝试将&lt;customErrors defaultRedirect="/YourLink"&gt;&lt;/customErrors&gt; 添加到&lt;system.web&gt; 它会按照我的想法解决。

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


【解决方案1】:

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

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

这就是说HTTP specification 明确定义响应HTTP 状态代码不优于5xx。所以设置Response.StatusCode = 600; 在这里看起来很不寻常。您到底想达到什么目的?为什么规范中定义的标准 HTTP 响应代码无法涵盖您的场景?

【讨论】:

    【解决方案2】:

    在 web.config 中,我将自定义错误部分设置如下:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 2021-09-25
      相关资源
      最近更新 更多