Встроенный в Content-Disposition не работает в Chrome

#google-chrome #asp.net-core #http-headers

#google-chrome #asp.net-core #http-заголовки

Вопрос:

У меня есть простая конечная точка ядра asp net, которая возвращает файл электронной почты:

         [HttpGet("files/{id:int}")]
        public async Task<IActionResult> GetFileAsync(int id)
        {
            ...
            var fileName = $"{id}.msg";
            var filePath = ...;
            System.Net.Mime.ContentDisposition cd = new System.Net.Mime.ContentDisposition
            {
                FileName = fileName,
                Inline = true,
            };
            Response.Headers.Add("Content-Disposition", cd.ToString());
            return PhysicalFile(filePath, MimeTypes.GetMimeType(filePath));
        }
  

Я хочу, чтобы браузер пытался открыть файл, и он работает в Firefox. Но Chrome загружает файл только даже с inline Content-Disposition :

 Content-Disposition: inline; filename=10979.msg
Content-Length: 112128
Content-Type: application/octet-stream
Server: Microsoft-IIS/8.5
  

Как это исправить?

Комментарии:

1. Могу ли я сделать «files /../ .. / .. / ../ passwd»? работает ли это?

2. Возможно, /../../../../././..

Ответ №1:

Как это исправить?

Firefox помогает пользователю открыть файл с помощью диалогового окна, но Edge и Chrome этого не делают. Но вы можете выбрать опцию «Всегда открывать файлы этого типа», как показано ниже, чтобы автоматически открывать файлы.

введите описание изображения здесь

Работа в браузерах Firefox, Edge и Chrome

введите описание изображения здесь

Как отменить «всегда открывать файлы этого типа»?

  • Chrome

введите описание изображения здесь

  • Edge

введите описание изображения здесь

Ответ №2:

Измените Content-Type на application/msg