首页 文章

在非开发环境中省略了从Web API方法返回的错误消息

提问于
浏览
22

我有一个Web API控制器POST方法,在本地和测试服务器上运行良好 . 如果一切顺利,它会返回:

new HttpResponseMessage( HttpStatusCode.Created )

如果出现问题,它会返回:

new HttpResponseMessage<IEnumerable<string>>( usefulMessages, HttpStatusCode.BadRequest );

问题是,当我向测试服务器发出导致错误的请求时,我收到了错误的请求代码,但我从未看到过这些消息 . 如果我向本地计算机发出完全相同的请求,我会看到消息 . 以下输出来自我自己的工具:

发送请求到我的本地机器我得到:

Status code: 400 (BadRequest)
Response data: ["Error message one", "Error message two"]

向测试服务器发送请求我得到:

Status code: 400 (BadRequest)
Response data: Bad Request

正在运行的代码完全相同 . 数据库是一样的 . 除服务请求的服务器外,一切都是一样的 . 我甚至有代码通过电子邮件发送自己的错误消息,所以我知道服务器正在生成正确的错误消息并且行为正确 . 这可能是一个IIS的东西(比如customErrors = RemoteOnly for Web API)?不仅从响应数据中省略了错误消息,而且发生了短语“错误请求”而不是放在那里 .

有任何想法吗?谢谢 .

4 回答

  • 3

    在HttpConfiguration.IncludesErrorDetailPolicy上查看this MSDN post

    在你的Global.asax中:

    var config = GlobalConfiguration.Configuration;
    config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
    

    我已使用此配置属性强制错误消息包含详细信息 .

  • 1

    有同样的问题 . 这确实是因为自定义错误设置 .

    在现实世界中,您肯定希望在应用程序中使用自定义错误页面,但为了使自定义异常消息在WebAPI中起作用,您需要禁用自定义错误页面 .

    如何解决这个问题?幸运的是,您可以使用web.config中的 <location> 元素来解决此问题 .

    解:

    <!-- General for the application -->
      <system.web>
        <customErrors mode="RemoteOnly" defaultRedirect="YourCustomErrorPage.aspx"/>
      </system.web>
    
      <!-- Override it for paths starting with api (your WebAPI) -->
      <location path="api">
         <system.web>
            <customErrors mode="Off" />
         </system.web>
      </location>
    

    我在自己的应用程序中使用此方法,效果很好 .

  • 20

    听起来它很可能是我的customErrors模式 . WebAPI运行在ASP.NET(MVC)之上,因此它使用所有相同的web.config设置 .

    如果它是测试服务器,您可以尝试关闭customErrors以进行验证 .

    <system.web>
        <customErrors mode="Off" />
    </system.web>
    
  • 14

    自beta以来,Web API代码库发生了很多变化 . 很多很棒的 . 了解如何获得每晚签名的版本here .

    不再支持通用 HttpResponseMessage<T> . 使用 HttpRequestMessage.CreateResponse<T> . 见thisthis .

    如果您计划继续坚持下去,那么您至少需要更新到当前的每晚构建而不是使用测试版 . 如此多的改进,特别是对于Web API .

    EDIT: 在我看来,这实际上与你原来的问题有关,因为,虽然我没有被IIS拦截't look into it for a concrete answer, it seems the newer stuff returns responses that don' . 它可能与错误处理/错误报告的重新处理有关 .

    UPDATE 8/14/2012 当前的MVC 4 / Web API候选版本已经足够了 . 除非您想要保持最新状态,否则您不需要再进行夜间构建 .

相关问题