Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can-HttpClient';s响应内容是否为空?_C#_.net Core_Httpclient - Fatal编程技术网

C# Can-HttpClient';s响应内容是否为空?

C# Can-HttpClient';s响应内容是否为空?,c#,.net-core,httpclient,C#,.net Core,Httpclient,从HttpClient获取HttpResponseMessage时,是否存在其内容可能为null的情况 HttpClient client = new HttpClient(); HttpResponseMessage response = await client.GetAsync("https://www.stackoverflow.com/"); if (response.Content == null) { // Can this happen? } else { str

HttpClient
获取
HttpResponseMessage
时,是否存在其
内容可能为
null
的情况

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("https://www.stackoverflow.com/");
if (response.Content == null) {
    // Can this happen?
}
else
{
    string responseBody = await response.Content.ReadAsStringAsync();
    // ...
}
如果您认为它可以是
null
,请提供一个示例来重现它

我尝试了很多方法,但都无法获得
null

╔═══════════════════════╦═════════════════════════════════╦═══════════════════════╗
║        要求║            回应║        内容║
╠═══════════════════════╬═════════════════════════════════╬═══════════════════════╣
║ 获取http║ 200好的,回答║ 反应║
║ 获取http║ 200好,回答是空的║ 空字符串║
║ 获取http║ 204无响应,空响应║ 空字符串║
║ 获取http║ 400错误的请求,一个响应║ 反应║
║ 获取http║ 400错误请求,空响应║ 空字符串║
║ 获取http║ 500错误请求,空响应║ 空字符串║
║ 头http║ 200好,回答是空的║ 空字符串║
║ 选项http║ 200好,回答是空的║ 空字符串║
║ 获取http,错误的DNS║ (从未击中)║ HttpRequestException║
║ 获取http,错误的方案║ (从未击中)║ 论据例外║
║ 获取http║ 永不回应║ TaskCanceledException║
╚═══════════════════════╩═════════════════════════════════╩═══════════════════════╝

因此,是的,它可以为空,但您应该使用
确保成功状态码
根据规范检查响应是否有效

,具体取决于响应状态码,正文中可能没有内容。一个例子是。但是,不知道C#如何利用它。
HEAD
也不返回body,但是来自HttpClient的内容返回空字符串,而不是
null
。了解我们是否需要检查
null
,或者是否总是需要空字符串是很有意思的。我刚刚用一个不好的方案和一个不存在的主机尝试了这个方法-在这种情况下,GetAsync返回的任务是错误的。我想知道提供错误响应的服务器会发生什么情况……您可以使用扩展方法确保它是空字符串(即将
null
转换为空字符串)。@Namoshek这可能是保持代码干净的一个很好的解决方法。但如果真的没有必要,我宁愿不去做。所以,我想一劳永逸地弄清这个问题。这是一个非常好的观察结果。但是,由于您所指的句子的前缀是“In.NETFramework和.NETCore2.2及更早版本”,因此还不完全清楚。在.NET Core 3.1中,它仍然可以是
null
?再说一遍,在什么情况下它可以是
null