.NET中读取HTTP请求的文件名

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;
}

留言

有想法?请给我们留言!您的留言不会直接显示在网站内。