在ASP.NET WebAPI中使用HttpContext.Current

时间:2012-08-31 16:19:23

标签: c# asp.net-mvc asp.net-web-api

我想处理WebAPI操作方法中的异常,通过捕获它们设置状态代码,并将消息写入响应。通常在正常的MVC Controller中我会这样做,使用Controller的{​​{1}}属性:

Response

但似乎Response.StatusCode = 404; Response.Write("Whatever"); 没有任何ApiController属性。是否有一个原因?可以像这样使用Response:?

HttpContext.Current.Response

或者是否有一种特定的方式从WebAPI控制器写入响应?

2 个答案:

答案 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’