Asp.net核心从url获取媒体类型



我正在尝试制作一个简单的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或图像(。

有没有办法从这个url中获取媒体类型的头?所以我可以为我的路线设置相同的一个?


我发现我可以做以下事情:

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

然而,由于某种原因,它不包括"内容类型"标题,即使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);

最新更新