在 System.net.Http 库中丢失带有 Http 状态代码 503 的错误消息

Posted

技术标签:

【中文标题】在 System.net.Http 库中丢失带有 Http 状态代码 503 的错误消息【英文标题】:Losing error message with Http Status code 503 in System.net.Http library 【发布时间】:2020-04-21 05:42:36 【问题描述】:

我们有 2 个后端服务相互通信,它们都使用带有 System.net.Http library 的 .net 框架

其中一个在满足特定条件时返回 HTTP 状态代码 503 和一些响应消息(“数据不可用”),如下图所示

控制器代码实现如下所示:

HttpResponseMessage response = new HttpResponseMessage  StatusCode = HttpStatusCode.ServiceUnavailable, ReasonPhrase = "XXXXXX data is currently not available XXXXXXXXX" ;
response.Content = new StringContent("XXXXXX is currently not available XXXXXXXXXX");
return response;

调用此 API 的其他服务正在使用响应并获取此 WebException,这是理想的情况,但问题是,当我丢失从第一个服务发送的消息(“数据不可用”)时尝试在调试窗口中打印响应,结果如下:

HttpWebResponse aresponse = request.GetResponse() as HttpWebResponse;
'HttpWebResponse aresponse = request.GetResponse() as HttpWebResponse' threw an exception of type 'System.Net.WebException'
    Data: System.Collections.ListDictionaryInternal
    HResult: -2146233079
    HelpLink: null
    InnerException: null
    Message: "The remote server returned an error: (503) Server Unavailable."
    Response: System.Net.HttpWebResponse
    Source: "System"
    StackTrace: null
    Status: ProtocolError
    TargetSite: null

如输出消息所示不是我从第一个服务发送的。这是 HTTP 状态码 503 的默认消息。

有没有办法让我从 WebException 中读取响应内容?

【问题讨论】:

【参考方案1】:

找到了解决办法,可以阅读System.net.WebException的回复

catch(WebException ex)

      HttpWebResponse errorResponse = webException.Response as HttpWebResponse;

      var statusDescription = errorResponse.StatusDescription;
      if(statusDescription.Contains("XXXXX"))
      
         // Added the condition here
      

【讨论】:

以上是关于在 System.net.Http 库中丢失带有 Http 状态代码 503 的错误消息的主要内容,如果未能解决你的问题,请参考以下文章

在 .NET Core 2.1.0-rc1-final 中使用 System.Net.Http.SocketsHttpHandler

在使用 Visual Studio 2010 部署/发布期间,一些 dll 丢失

当我在存储库中丢失一些修订时,如何转储所有 svn 数据?

如何在不丢失历史记录的情况下从 SVN 存储库中删除***目录?

System.Net.Http.HttpClient 在 .net 核心和 .net 框架中的行为不同

尝试激活服务时无法解析类型“System.Lazy`1[System.Net.Http.IHttpClientFactory]”的服务