HttpClient的不报告从网页API返回的异常(HttpClient doesn't r

2019-09-21 14:05发布

我使用HttpClient打电话给我MVC 4个Web API。 在我的Web API调用,它返回一个域对象。 如果出现问题,一个HttpResponseException将在服务器被抛出,用定制的消息。

 [System.Web.Http.HttpGet]
  public Person Person(string loginName)
    {
        Person person = _profileRepository.GetPersonByEmail(loginName);
        if (person == null)
            throw new HttpResponseException(
      Request.CreateResponse(HttpStatusCode.NotFound, 
                "Person not found by this id: " + id.ToString()));

        return person;
    }

我可以看到在使用IE F12响应主体定制错误消息。 然而,当我把它使用HttpClient ,我没有得到自定义错误消息,只有HTTP代码。 该“ReasonPhrase”始终是“未找到” 404,或“内部服务器错误” 500码。

有任何想法吗? 如何从Web API发回的自定义错误信息,同时保持正常返回类型为我的域对象?

Answer 1:

(这里把我的答案更好的格式化)

是的,我看到了它,但HttpResponseMessage没有一个身体属性。 我想通了自己: response.Content.ReadAsStringAsync().Result; 。 示例代码:

public T GetService<T>( string requestUri)
{
    HttpResponseMessage response =  _client.GetAsync(requestUri).Result;
    if( response.IsSuccessStatusCode)
    {
        return response.Content.ReadAsAsync<T>().Result;
    }
    else
    {
        string msg = response.Content.ReadAsStringAsync().Result;
            throw new Exception(msg);
    }
 }


Answer 2:

敛从响应该异常时,我分解出来的一些逻辑。

这使得它非常容易提取异常,内部异常,内部异常:)等

public static class HttpResponseMessageExtension
{
    public static async Task<ExceptionResponse> ExceptionResponse(this HttpResponseMessage httpResponseMessage)
    {
        string responseContent = await httpResponseMessage.Content.ReadAsStringAsync();
        ExceptionResponse exceptionResponse = JsonConvert.DeserializeObject<ExceptionResponse>(responseContent);
        return exceptionResponse;
    }
}

public class ExceptionResponse
{
    public string Message { get; set; }
    public string ExceptionMessage { get; set; }
    public string ExceptionType { get; set; }
    public string StackTrace { get; set; }
    public ExceptionResponse InnerException { get; set; }
}

对于一个完整的讨论,请参阅此博客文章 。



Answer 3:

自定义错误消息将在响应的“主体”。



文章来源: HttpClient doesn't report exception returned from web API