Возврат 404 при использовании атрибута ProducesAttribute для изображения / jpg в ASP. Net Core Web APi - PullRequest
0 голосов
/ 06 апреля 2020

Мне нужна следующая конечная точка, которая должна вернуть изображение. Я хочу вернуть код 404, когда нет изображения для данного идентификатора сотрудника

        [HttpGet("{employeeId}/images/picture")]        
        [ProducesResponseType(StatusCodes.Status404NotFound)]
        [ProducesResponseType(StatusCodes.Status200OK)]
        [Produces("image/jpg")]
        public ActionResult GetImage(int employeeId)
        {
            var fileName = _employeeService.GetImage(employeeId);

            if (fileName == null)
            {
                return NotFound();
            }

            return PhysicalFile(fileName, "image/jpg", $"{employeeId}-picture.jpg");
        }

Проблема, с которой я сталкиваюсь, заключается в том, что это возвращает HTTP 406 (неприемлемо), если файл не может существовать. При отладке я вижу go в строке return NotFound().

Это работает, как и ожидалось, если я уберу атрибут [Produces("image/jpg")]. Я предполагаю, что фильтр недоволен тем, что 404 возвращается за Content-Type=image/jpg

Я думаю, я мог бы пропустить это, но я действительно хотел бы понять, что происходит, и посмотреть, есть ли решение.

Спасибо

1 Ответ

0 голосов
/ 07 апреля 2020

Атрибут Productions используется для указания типа данных, возвращаемых операцией.

Поскольку текущий метод ограничивает возвращение только типа данных image/jpg, NotFound () не будет разрешено получать, поэтому появится сообщение 406 Not Acceptable.

Для возврата 404 обычно, добавьте разрешенный тип application/json в атрибут Produces следующим образом:

[Produces("image/jpg", "application/json")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...