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
?