HTTP的响应头中的Content-Disposition
项会给出建议的文件名。而.NET网络库的HttpResponseMessage.Headers
中并不包含Content-Disposition
这一项。以下代码会得到null
,而不是相应的响应头:
using (HttpClient client = new HttpClient())
{
var request = new HttpRequestMessage(HttpMethod.Head, uri);
var result = await client.SendAsync(request);
result.Headers.TryGetValues("Content-Disposition", out IEnumerable<string> values);
return values;
}
然而,.NET的HttpClient
不但支持Content-Disposition
的读取,还能够自动解析其值。通过HttpResponse.Content.Headers.ContentDisposition
对象,可以直接获得文件名。其FileName
属性可获取Content-Disposition响应头中的filename
参数(只支持ASCII编码的字符),FileNameStar
属性可获取filename*
参数(支持多种编码)。
以下为获取建议的文件名的示例代码:
using (HttpClient client = new HttpClient())
{
var request = new HttpRequestMessage(HttpMethod.Head, uri);
var result = await client.SendAsync(request);
return result.Content.Headers.ContentDisposition.FileNameStar;
}