2012-08-31 10 views
5

Chcę poradzić sobie z wyjątkami w metodzie akcji WebAPI, łapiąc je, ustawiając kod statusu i pisząc wiadomość do odpowiedzi. Normalnie w normalnym MVC Controller zrobiłbym to tak jak, używając Controller „s Response właściwość:Korzystanie z HttpContext.Current w ASP.NET WebAPI

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

Jednak wydaje ApiController nie posiada żadnego majątku Response. Czy istnieje ku temu powód? Czy można tak po prostu użyć HttpContext.Current.Response :?

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

Czy istnieje konkretny sposób zapisu odpowiedzi z kontrolera WebAPI?

Odpowiedz

7

Metoda działania ma na celu utworzenie obiektu odpowiedzi. Albo po prostu wykonaj nową HttpResponseMessage, albo zadzwoń do this.CreateResponse.

Jeśli zamiast zwrotu HttpResponseMessage chcesz powrócić niestandardowych obiektów CLR następnie trzeba będzie rzucić HTTPResponseException zwrócić 404.

+0

wiwaty dla że będę na nią patrzeć – jcvandan

+1

@ dormisher Aby dodać, spróbuj nie używać HttpContext, ponieważ uniemożliwi to korzystanie z dowolnego hosta innego niż IIS. –

+0

Hej człowieku - wciąż mam z tym kłopoty, kiedy wyrzucam wyjątek HttpResponseException, odpowiedź jest po prostu pusta 200 - jakikolwiek pomysł, dlaczego tak jest? Widziałem inną odpowiedź SO mówiąc, aby ustawić tę wartość val: - ale bez zmian – jcvandan

0

Jeśli chcesz utworzyć wiadomość opisującą wyjątek, najlepiej to zadzwonić pod numer Request.CreateErrorResponse i użyć dowolnego z dostępnych przeciążeń. Istnieją zastrzeżenia co do sposobu formatowania odpowiedzi w zależności od tego, czy w swoim pliku web.config masz ustawioną wartość CustomErrors, czy też jesteś w trybie DEBUG. Możesz również skonfigurować to zachowanie programowo, używając właściwości HttpConfiguration.IncludeErrorDetailPolicy. Zobacz również tutaj: http://weblogs.asp.net/cibrax/archive/2013/03/01/asp-net-web-api-logging-and-troubleshooting.aspx

Możesz przeczytać ten artykuł do dogłębnego napisać, a niektóre opcje trzeba rozwiązać problem, który dokładnie opisywać: Web API, HttpError and the behavior of Exceptions – ‘An error has occurred’

Powiązane problemy