我有一个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的东西(就像Web API的customErrors = RemoteOnly的等价物)?不仅从响应数据中省略了错误消息,还发明了短语"Bad Request“放入其中。
有什么想法吗?谢谢。
发布于 2012-05-04 01:46:19
看看HttpConfiguration.IncludesErrorDetailPolicy上的this MSDN post:
在您的Global.asax中:
var config = GlobalConfiguration.Configuration;
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
我已经使用此配置属性强制错误消息包含详细信息。
发布于 2014-05-12 21:50:29
也有同样的问题。这确实是因为自定义的错误设置。
在实际场景中,您肯定希望在应用程序中使用自定义错误页,但是为了让自定义异常消息在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>
我在自己的应用程序中使用了这种方法,效果很好。
发布于 2012-04-25 01:52:36
对我来说,这听起来很可能是你的customErrors模式。WebAPI运行在ASP.NET (MVC)之上,所以它使用所有相同的web.config设置。
如果是测试服务器,您可以尝试关闭customErrors进行验证。
<system.web>
<customErrors mode="Off" />
</system.web>
https://stackoverflow.com/questions/10246942
复制相似问题