Asp. net Core Получить MediaType по URL-адресу? - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь создать простой 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"
    };
}

Позже logi c станет более сложным, но в качестве теста я пробовал это.

В любом случае, "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"
            };
        }

Однако это по какой-то причине не включает "Content -Type », хотя firefox показывает, что он находится на том же URL-адресе.

1 Ответ

0 голосов
/ 06 мая 2020

Я нашел решение. Заголовок был в 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);
...