HttpClientはASPを読み取る.NET Web APIエラー情報の簡単な方法
4371 ワード
C#ではHttpClientでWeb APIを呼び出しContent.ReadAsStringAsync()応答内容を読み込むと、500エラー(InternalServerError)が発生すると、エラー情報を含むjson文字列が得られます.
このような複雑な文字列は可読性が悪く、通常は一部の情報(例えばExceptionMessage)だけでエラーの状況を知ることができます.
では、必要な情報の一部をどのように読み取るのでしょうか.
使い始めたのはMicrosoftです.AspNet.WebApi.Client+dynamic、実装コードは以下の通りです.
後で考えてみると、このjson文字列もあるタイプのインスタンスをシーケンス化しているので、このタイプを見つけて、このタイプのインスタンスを直接逆シーケンス化するのは、もっと簡単ではないでしょうか.
探してみると、Microsoftだった.AspNet.WebApi.CoreのHttpError:
次に、より簡単な実装コードを変更します.
注意:nugetでMicrosoftをインストールする必要があります.AspNet.WebApi.ClientとMicrosoft.AspNet.WebApi.Core
{
"Message":"An error has occurred.",
"ExceptionMessage":"",
"ExceptionType":"",
"StackTrace":"",
"InnerException":
{
"Message":"",
"ExceptionMessage":"",
"ExceptionType":",
"StackTrace":"",
"InnerException":
{
"Message":"",
"ExceptionMessage":"",
"ExceptionType":"",
"StackTrace":""
}
}
}
このような複雑な文字列は可読性が悪く、通常は一部の情報(例えばExceptionMessage)だけでエラーの状況を知ることができます.
では、必要な情報の一部をどのように読み取るのでしょうか.
使い始めたのはMicrosoftです.AspNet.WebApi.Client+dynamic、実装コードは以下の通りです.
var response = await _httClient.GetAsync(url);
dynamic content = await response.Content.ReadAsAsync<ExpandoObject>();
Console.WriteLine(content.ExceptionMessage);
後で考えてみると、このjson文字列もあるタイプのインスタンスをシーケンス化しているので、このタイプを見つけて、このタイプのインスタンスを直接逆シーケンス化するのは、もっと簡単ではないでしょうか.
探してみると、Microsoftだった.AspNet.WebApi.CoreのHttpError:
namespace System.Web.Http
{
[XmlRoot("Error")]
public sealed class HttpError : Dictionary<string, object>, IXmlSerializable
{
public HttpError();
public HttpError(string message);
public HttpError(ModelStateDictionary modelState, bool includeErrorDetail);
public HttpError(Exception exception, bool includeErrorDetail);
public string ExceptionMessage { get; set; }
public string ExceptionType { get; set; }
public HttpError InnerException { get; }
public string Message { get; set; }
public string MessageDetail { get; set; }
public HttpError ModelState { get; }
public string StackTrace { get; set; }
public TValue GetPropertyValue<TValue>(string key);
}
}
次に、より簡単な実装コードを変更します.
var response = await _httClient.GetAsync(url);
Console.WriteLine((await response.Content.ReadAsAsync<HttpError>()).ExceptionMessage);
注意:nugetでMicrosoftをインストールする必要があります.AspNet.WebApi.ClientとMicrosoft.AspNet.WebApi.Core