Есть ли способ создать атрибут Accept для принудительной проверки заголовка Accept в действии ASP.NET Core Controller? - PullRequest
0 голосов
/ 06 ноября 2018

Просто интересно, есть ли способ заставить через атрибут в ASP.NET Core проверять, принадлежит ли значение HTTP-заголовка указанному заданному значению (например, application/json, application/xml)

Я знаю, что есть ProducesAttribute (https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.producesattribute?view=aspnetcore-2.1):

[Produces("application/json", "application/xml")]

Но это больше о поддерживаемых типах контента, а не об анализе заголовка Accept.

Я бы ожидал чего-то подобного, который вернул бы HTTP-код 406, если бы значение заголовка Accept не было:

[Accept("application/json", "application/xml")]

Если в коробке нет такого атрибута, как я могу его создать?

1 Ответ

0 голосов
/ 06 ноября 2018

Такой атрибут не нужен. Заголовок Accept - это просто способ указать клиенту предпочтение для определенного типа ответа, и клиент может запросить все, что ему нужно. Он находится на сервере, чтобы определить, как на самом деле ответить, и если он не поддерживает определенный тип контента, он просто возвращает 415 Unsupported Media Type ответ. В противном случае он вернет первый тип содержимого, который он фактически поддерживает, в соответствии с порядком типов содержимого в заголовке Accept клиента.

FWIW, важно понимать, что HTTP и лежащие в его основе IP-протоколы специально предназначены для обеспечения беспрепятственной связи между клиентом и сервером. Сама терминология «запроса» подразумевает эту природу. Сервер не может и не должен вызывать какое-либо поведение на клиенте, и наоборот. Все, что может сделать, это указать свои предпочтения, а затем согласовать (еще один ключевой термин) ответ на конкретный запрос.

Короче говоря, вы не можете помешать клиенту запрашивать такие вещи, как определенный тип контента. Однако сервер может ответить, что он не поддерживает данный тип, если это так.

...