2012-08-31 104 views
5

我想要處理WebAPI操作方法中的異常,方法是捕獲它們設置狀態代碼並將消息寫入響應。然而似乎ApiController沒有任何Response財產在ASP.NET中使用HttpContext.Current WebAPI

Response.StatusCode = 404; 
Response.Write("Whatever"); 

:通常在一個正常的MVC Controller我會做這個,像這樣,使用ControllerResponse財產。是否有一個原因?是否可以這樣使用HttpContext.Current.Response:?

HttpContext.Current.Response.StatusCode = 404; 
HttpContext.Current.Response.Write("Whatever"); 

或者是否存在從WebAPI控制器寫入響應的特定方式?

回答

7

操作方法應該創建響應對象。要麼只是做新的HttpResponseMessage或調用this.CreateResponse。

如果不是返回HttpResponseMessage要返回一個自定義的CLR對象,那麼你就需要拋出一個HTTPResponseException返回一個404

+0

歡呼聲,我會考慮它 – jcvandan

+1

@ dormisher只需添加,儘量不要使用HttpContext,因爲它會阻止您使用IIS以外的任何其他主機。 –

+0

嘿人 - 仍然有一些麻煩,當我拋出一個HttpResponseException,響應只是一個空的200 - 任何想法,爲什麼這是?我看到另一個SO回答說要設置此配置val: - 但沒有更改 – jcvandan

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’

相關問題