【发布时间】:2016-04-25 00:09:38
【问题描述】:
我需要检测位于特定 URL 上的内容类型。所以我创建了一个方法来获取响应的 Content-Type。对于小文件和 HTML 页面,它可以正常工作,但如果 URL 指向一个大文件,请求需要很长时间 - 它会在后台获取整个内容(文件)。那么,是否可以在收到Content-Type 标头后立即取消请求并返回结果?
我目前的实现:
public async static Task<string> GetContentType(string url)
{
try
{
using (HttpClient client = new HttpClient())
{
var response = await client.GetAsync(url);
if (!response.IsSuccessStatusCode)
{
return null;
}
return response.Content.Headers.ContentType.MediaType;
}
}
catch (HttpRequestException)
{
return null;
}
}
【问题讨论】:
-
我想该问题中的功能取决于发送响应的服务器。它可能不尊重请求,只是将所有内容都发送给您
-
HttpClient无法做到这一点,但WebHttpRequest允许。 -
@Richard 在此处查看答案。他们使用 HttpClient 有什么问题?另外,如果没有问题,那么这个问题不是重复的。
-
@YamMarcovic 首先它是重复的:只获取标题,因此提取
Content-Type是其他 Q 所要求的。其次,我检查了HttpClient的Get重载,它采用了HTTP 方法参数(但错过了另一种方法)。无论如何,另一个 Q 回答了这个问题(即使它确实使用了不同的类型)。 -
@Richard 这个问题,即使在其标题中,也涉及 HttpClient 类。根据您的推理,您不妨将其标记为重复,因为有一个等效的 Python 实现的答案。
标签: c# .net content-type dotnet-httpclient