Asp.net Core 从 url 获取 MediaType?
Asp.net Core Get MediaType from url?
我正在尝试创建一个简单的 asp.net 核心路由,该路由 return 是另一个 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
可能 return 不同类型的文件(可能是 pdf 或图像)。
有没有办法从 url 中获取媒体类型 header?所以我可以为我的路线设置相同的吗?
我发现我可以做到以下几点:
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" header,即使 firefox 显示它在同一个 url.
上
我找到了解决方案。 header 在 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);
我正在尝试创建一个简单的 asp.net 核心路由,该路由 return 是另一个 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
可能 return 不同类型的文件(可能是 pdf 或图像)。
有没有办法从 url 中获取媒体类型 header?所以我可以为我的路线设置相同的吗?
我发现我可以做到以下几点:
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" header,即使 firefox 显示它在同一个 url.
上我找到了解决方案。 header 在 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);