首页 > 解决方案 > 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 上。

标签: asp.net-core.net-coredotnet-httpclient

解决方案


我找到了解决方案。标题在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);

推荐阅读