HttpClient 읽기 ASP.NET 웹 API 오류 정보의 간단한 방법

4393 단어
C#에서 HttpClient를 사용하여 웹 API를 호출하고 Content.ReadAsstringAsync()가 응답 내용을 읽을 때 500 오류(InternalServerError)가 발생하면 오류 정보가 포함된 json 문자열이 표시됩니다.
{
    "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);

참고: Microsoft를 설치하려면 nuget이 필요합니다.AspNet.WebApi.Client 및 Microsoft.AspNet.WebApi.Core

좋은 웹페이지 즐겨찾기