2016-06-18 11 views
4

マイWebAPIの方法は、エラー応答を返します。私のクライアント側(MVCプロジェクト)でRequest.CreateErrorResponseからエラーメッセージを読み取るには?

return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Something bad happened"); 

を、私はエラーメッセージを表示したいのですが、メッセージを取得することができません表示に「悪い何かが起こった」:

reasonPhrase以外
var response = await client.SendAsync(request); 
if (!response.IsSuccessStatusCode) 
{ 
    ViewBag.Error= response.ReasonPhrase; 
} 

、私はresponse.ToString()response.Content.ToString()、そしてresponse.Content.ReadAsStringAsync()を試してみました。彼らの誰も私にメッセージを届かない。郵便配達員はどのようにメッセージを表示できますか?

どのように私はメッセージ文字列にアクセスできますか?

+0

'response.Content.ReadAsStringAsync()'がそれを行う必要があります。あなたはそれをやろうとしたコードを投稿できますか?その他のエラーが発生している可能性があります。 –

+0

私はその問題を知っていると思いますが、答えとして追加されました。 –

答えて

0

エラーメッセージが表示されます。あなたのデバッグを完了したとき、あなたは戻り値の型

 public string someRequest() 
    { 
     try 
     { 
      var response = await client.SendAsync(request); 
      return "Ok"; 
     } 
     catch (Exception e) 
     { 
     return e.Message; 
     } 
    } 
4

を変更することができ、あなたの応答内容がapplication/jsonとして戻ってきた場合、あなたはこのようなJson.Netでそれをデシリアライズすることができます

if(!response.IsSuccessStatusCode) 
{ 
    var errors = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(response.Content.ReadAsStringAsync().Result); 
    var message = errors[HttpErrorKeys.MessageKey]; 

    // message is "Something bad happened" 
} 
3

私は、response.Content.ReadAsStringAsync()Task<string>を返すと思いますstringではありません。あなたは

response.Content.ReadAsStringAsync().Result 

を使用する必要があるだろうか、あなたのメソッドがasyncをマークされている場合、あなたはそれを待つことができます。

string message = await response.Content.ReadAsStringAsync(); 
+0

うーん、これかも...それを試してみるかもしれない。ありがとう。 – Prabhu

+0

それはあなたのためにそれを得る? –