Asp.net Core从url中获取MediaType?

问题描述 投票:0回答:1

我想做一个简单的asp.net core路由,从另一个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"
            };
        }

然而,由于某些原因,这并不包括 "内容 - 类型 "头, 即使火狐显示它是在同一个网址。

asp.net-core .net-core dotnet-httpclient
1个回答
0
投票

我找到了解决办法。头部是在 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);
© www.soinside.com 2019 - 2024. All rights reserved.