我想处理WebAPI操作方法中的异常,通过捕获它们设置状态代码,并将消息写入响应。通常在正常的MVC Controller
中我会这样做,使用Controller
的{{1}}属性:
Response
但似乎Response.StatusCode = 404;
Response.Write("Whatever");
没有任何ApiController
属性。是否有一个原因?可以像这样使用Response
:?
HttpContext.Current.Response
或者是否有一种特定的方式从WebAPI控制器写入响应?
答案 0 :(得分:7)
action方法应该创建响应对象。要么只是做新的HttpResponseMessage,要么调用this.CreateResponse。
如果要返回HttpResponseMessage而不是返回自定义CLR对象,则需要抛出HTTPResponseException以返回404.
答案 1 :(得分:0)
如果要创建描述异常的消息,最好的办法是调用Request.CreateErrorResponse,并使用任何可用的重载。根据您是否在web.config中将CustomErrors设置为ON,或者您是否处于DEBUG模式,有关如何格式化响应的警告。实际上,您也可以使用HttpConfiguration.IncludeErrorDetailPolicy属性以编程方式配置此行为。请参阅此处:http://weblogs.asp.net/cibrax/archive/2013/03/01/asp-net-web-api-logging-and-troubleshooting.aspx
您可以阅读本文以进行深入的撰写,以及解决您所描述的确切问题的一些选项:Web API, HttpError and the behavior of Exceptions – ‘An error has occurred’