Регистрация HTTP-глагола PATCH в IIS 7 / 7,5 - PullRequest
5 голосов
/ 19 марта 2012

Я хочу реализовать недавно одобренный HTTP-глагол PATCH в сервисе RESTful, реализованном в ASP MVC 3. Я добавил следующие параметры в файл web.config.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="PATCHVerbHandler" path="*" verb="PATCH" modules="ProtocolSupportModule" requireAccess="None" /> 
        </handlers>
        <security>
            <requestFiltering>
                <verbs>
                    <add verb="PATCH" allowed="true" />
                </verbs>
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>

Метод действия оформленс атрибутом AcceptVerbs("PATCH").

Служба корректно работает с глаголом PATCH.URL-адрес перенаправляется на правильный метод действия и возвращает правильные данные.

Странная проблема в том, что если я использую другой URL-адрес, который не соответствует ни одному из маршрутов, используя глагол PATCH, IIS возвращает «200 OK» вместо"404 Не Найдено".Все стандартные глаголы (GET, PUT, DELETE, POST, HEAD, OPTIONS) не имеют этой проблемы.

Нужно ли регистрировать дополнительные обработчики для глагола PATCH или это проблема маршрутизации?Любая помощь приветствуется.

1 Ответ

6 голосов
/ 28 марта 2012

Вы не на самом деле нужен специальный обработчик для обработки HTTP-запросов, сделанных с помощью глагола PATCH; вместо этого вы можете продолжать украшать свои действия атрибутом AcceptVerbs("PATCH"), проверяя, что ASP.NET ISAPI настроен для обработки любого глагола (по умолчанию), включая PATCH.

Если вам нужно обрабатывать такого рода запросы с помощью пользовательского модуля, кстати, имейте в виду, что именно обработчик несет ответственность за установку кода состояния для каждого запроса (включая те, которые он должен обрабатывать, в соответствии с отображением, но не может по какой-либо причине) и, возможно, он не устанавливает правильное значение после окончания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...