asp.net-core - Asp.net Core 从 url 获取 MediaType?
问题描述
我正在尝试制作一个简单的 asp.net 核心路由,该路由从另一个 url 返回文件。像这样的东西:
private static HttpClient Client { get; } = new HttpClient();
async public Task<ActionResult<byte[]>> AssetStorage(string id)
{
var stream = await Client.GetStreamAsync("https://myurl/assetstorage/" + id);
return new FileStreamResult(stream, /* what here? */)
{
FileDownloadName = "filename"
};
}
后来逻辑会变得更复杂,但作为一个测试,我正在尝试这个。
无论如何,"https://myurl/assetstorage/" + id
可能会返回不同类型的文件(可能是 pdf 或图像)。
有没有办法从该网址获取媒体类型标头?所以我可以为我的路线设置相同的路线吗?
我发现我可以做到以下几点:
var response = await Client.GetAsync("url" + id, HttpCompletionOption.ResponseHeadersRead);
string contentType = response.Headers.GetValues("Content-Type").First();
using (var stream = await response.Content.ReadAsStreamAsync())
{
return new FileStreamResult(stream, contentType)
{
FileDownloadName = "filename"
};
}
但是,由于某种原因,它不包括“Content-Type”标头,即使 Firefox 显示它在同一个 url 上。
解决方案
我找到了解决方案。标题在response.Content.Headers
而不是response.Headers
:
var response = await Client.GetAsync("url" + id);
string contentType = response.Content.Headers.GetValues("Content-Type").First();
return new FileStreamResult(await response.Content.ReadAsStreamAsync(), contentType);
推荐阅读
- c++ - 将 $(location) 传递给 Bazel --test_arg
- python - Python 3 中的服务目录
- kubernetes - Kubernetes 节点未就绪:ContainerGCFailed / ImageGCFailed 上下文期限已超过
- php - SEO 问题 Google 将我的网站 URL 编入索引两次
- c - 循环中的表格未正确显示数据
- git - 在推送到 github 时,! [rejected] master -> master (fetch first) error: failed to push some refs to "
" - ajax - 如何正确地将 ajax 函数重写为 Reactjs 等效项
- excel - Excel iso 8601 时间戳减去 2 小时转换
- google-bigquery - BigQuery _TABLE_SUFFIX 为空/缺少表
- soap - 在 zend soap 服务器 WSDL 中创建自定义标头