2016-10-31 5 views
1

私はこのウェブAPIにのWeb APIは、常に私が怒鳴るエラーを投げてい

using (var client = new HttpClient(new HttpClientHandler() { Credentials = _credentials })) 
      { 
       client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));      
       return await client.PostAsJsonAsync(controlActionPath, entityObject); 
      } 

ウェブAPIコントローラを呼び出すためのHttpClientを使用しています投げている代わりに、エラーの内部サーバーエラーを返します。 Webアプリケーションは常にDuplicateNameExceptionの代わりに内部サーバーエラーを取得します。

誰かがWeb APIから戻って、Webアプリケーションへの正確な例外を取得するための最良の方法がどうなるかを示唆場合は、参考になります。

+2

あなたがコントローラに投げる例外は順番にHTTPメッセージに変換する必要がありますあなたのクライアントに戻る。デフォルトでは、Web APIは例外を処理してHTTPステータスコード500(内部サーバーエラー)でラップして、例外のスタックトレースを応答の本文に書き込むような処理をします。 私は、例外をシリアル化することを返し、その後、クライアント側でそれをデシリアライズような何かをしないバック応答で正確な例外を得ることについてはよく分かりません。 – ivanPfeff

+0

Web API Action Methodのコードを投稿できますか? – Win

答えて

3

あなたが例外をスローしているので、それはあなたの内部のサーバー側のコードではまだだから、それは自動的に、内部サーバーエラーになります。あなたはthis answer中のような例外ハンドラを作成するか、またはウェブAPI documentation on exception handlingで説明するように、あなたは、特定のHttpResponseExceptionタイプを投げることができます。

var response = new HttpResponseMessage(HttpStatusCode.BadRequest) 
{ 
    ReasonPhrase = "User already exists." 
}; 

throw new HttpResponseException(response); 
関連する問題