C# 当响应为HttpStatusCode.NoContent时,有没有办法获取HttpResponseMessage.Content正文?

C# 当响应为HttpStatusCode.NoContent时,有没有办法获取HttpResponseMessage.Content正文?,c#,asp.net-core,dotnet-httpclient,C#,Asp.net Core,Dotnet Httpclient,我正在使用C#和.NET Core 3.0 当前,当我向服务器发送GET请求并返回状态为204的响应时,似乎System.Net.Http.HttpClient会将主体从中剥离,我无法读取其内容 var request = new HttpRequestMessage(HttpMethod.Get,$"/gettask.ashx?testerror=20"); var response = await _httpClient.SendAsync(request); var responseCon

我正在使用C#和.NET Core 3.0

当前,当我向服务器发送GET请求并返回状态为204的响应时,似乎
System.Net.Http.HttpClient
会将主体从中剥离,我无法读取其内容

var request = new HttpRequestMessage(HttpMethod.Get,$"/gettask.ashx?testerror=20");
var response = await _httpClient.SendAsync(request);
var responseContent = await response.Content.ReadAsStringAsync();
我知道服务器在状态为204时也返回body。我已经用Curl测试了它,它返回了204
{“nextRequestInSec”:10}
的这个主体

来自curl的详细响应:

curl http://address.dom/testerror=204 -v
*   Trying xxx.xxx.xxx.xxx...
* TCP_NODELAY set
* Connected to address.dom (xxx.xxx.xxx.xxx) port 80 (#0)
> GET testerror=204 HTTP/1.1
> Host: address.dom
> User-Agent: curl/7.55.1
> Accept: */*
>
< HTTP/1.1 204 No Content
< Cache-Control: private
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=utf-8
< Server: Microsoft-IIS/8.5
< X-AspNet-Version: 4.0.30319
< X-Powered-By: ASP.NET
< Date: Wed, 20 Nov 2019 13:45:00 GMT
<
{ "nextRequestInSec" : 10 }* Connection #0 to host address.dom left intact
curlhttp://address.dom/testerror=204 -五
*正在尝试xxx.xxx.xxx.xxx。。。
*TCP_节点集
*已连接到address.dom(xxx.xxx.xxx.xxx)端口80(#0)
>GET Tester错误=204 HTTP/1.1
>主机:address.dom
>用户代理:curl/7.55.1
>接受:*/*
>
对于其他响应(200、401、403、404、420、500),它工作正常,我也可以阅读正文


有什么方法可以到达这个主体吗?

204表示没有内容,所以在阅读内容之前,请检查状态代码。 如果要返回数据,请更改状态代码,因为204不应返回

var request = new HttpRequestMessage(HttpMethod.Get,$"/gettask.ashx?testerror=20");
var response = await _httpClient.SendAsync(request);
var responseContent = (response.IsSuccessStatusCode && response.StatusCode !=204)? await 
                      response.Content.ReadAsStringAsync():null;

正如@peinarydevelopment在他们的评论中提到的,
httpclient
实例不会返回不支持状态代码的主体。解决问题的最佳方法是修复服务器(或询问负责人)


如果你真的必须处理坏了的HTTP服务器,你可以降到TCP级别,直接从套接字检索数据包,这似乎是解决问题的一个很长的方法。

看来我有点盲目。事实是,在.NET核心中,根据

此外,如果您将其视为HTTP通信,则应遵循以下内容:

204响应不能包括消息体,因此总是由头字段后的第一个空行终止


看起来好像你无法得到它:你确定卷曲显示了身体吗?我很怀疑,所以我自己做了一个测试,它切断了response@richzilla我已经编辑了这个问题-看看那里的卷曲回答。好的,一般来说-204只是一个状态,身体就是身体。我收到的是哪种状态都不重要……状态是为某件事而设定的,比如解析响应的方式。你是对的,我看得不对。