2012-08-31 12 views
5

WebAPIアクションメソッドで例外を処理し、ステータスコードの設定をキャッチしてレスポンスにメッセージを書き込んでいます。 ApiControllerはどんなResponse性質を持っていないようだがASP.NET WebAPIでHttpContext.Currentを使用する

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

:通常は、通常のMVC Controllerに私がControllerさんResponseプロパティを使用して、のようなので、これを行うだろう。これには理由がありますか?次のようにHttpContext.Current.Responseを使用してもかまいません:

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

WebAPIコントローラからの応答に具体的な書き込み方法がありますか?

答えて

7

アクションメソッドは、レスポンスオブジェクトを作成することになっています。新しいHttpResponseMessageを実行するか、this.CreateResponseを呼び出します。

代わりHttpResponseMessageを返すカスタムのCLRオブジェクトを返すようにしたい場合は、あなたがあなたの例外を説明するメッセージを作成したい場合は404

+0

歓声を私はそれに – jcvandan

+1

を見ていきます@ dormisherを追加するだけで、HttpContextを使用しないと、IIS以外の他のホストを使用できなくなります。 –

+0

ちょっと男 - これに何か問題がありますが、HttpResponseExceptionを投げると、応答は単に空の200になります - これはなぜなのでしょうか? - 変更はありません。 – jcvandan

0

を返すようにHTTPResponseExceptionをスローする必要があります、あなたの最善の策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’

関連する問題