HTTP Patch Verb не работает на Windows Server 2012 r2

Я работаю над одностраничным приложением, которое использует WebApi для обработки данных. Мой сайт был размещен на Windows Server 2008 R2 (IIS 7.5.7600.16385) и работал нормально, однако после перехода на Windows Server 2012 R2 (IIS 8.5.9600.16384) HTTP PATCH VERBS не работает, вызов API возвращается с кодом состояния 400 «Неверный запрос». ". Я пробовал следующий фрагмент кода в web.config, но не повезло.

<handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" type="System.Web.Handlers.TransferRequestHandler" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" />
      <add name="Telerik.ReportViewer.axd_*" type="Telerik.ReportViewer.WebForms.HttpHandler, Telerik.ReportViewer.WebForms, Version=9.0.15.225, Culture=neutral, PublicKeyToken=a9d7983dfcc261be" path="Telerik.ReportViewer.axd" verb="*" />
    </handlers>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
    </modules>

Гуглил снова и снова, но ничего полезного не получил, я застрял здесь, буду признателен за любую помощь.


person Ahmad Ahsan    schedule 09.03.2015    source источник
comment
stackoverflow.com/a/14631068/932833 мне помог. Может стоит попробовать...   -  person Neil Thompson    schedule 09.03.2015
comment
Вы знаете, в какой момент он терпит неудачу? например он попадает в ваш метод request_start в global.asax? Доходит ли он до вашего контроллера?   -  person rdans    schedule 09.03.2015
comment
@RyanDansie понятия не имею, но я использую Windows 8.1 (IIS 8.5.9600.16384) на своей машине для разработки, и здесь все работает нормально. Не могли бы вы подсказать мне, как проверить, где это не удается? Спасибо.   -  person Ahmad Ahsan    schedule 09.03.2015
comment
на рабочем сервере вам обычно нужно добавить ведение журнала, например. напишите в средство просмотра файлов/БД/событий в разных местах, чтобы узнать, к каким частям кода он попадает. В этом случае я бы проверил контроллер, глобальные события asax и любые фильтры аутентификации/действия, которые есть на вашем контроллере. Вы также можете попробовать удаленную отладку Visual Studio, но это не так просто.   -  person rdans    schedule 09.03.2015


Ответы (2)


Это настройки web.config, которые я использовал, когда у меня была аналогичная проблема с запросами PUT после перемещения серверов.

<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
person rdans    schedule 09.03.2015
comment
@RyanDanise Спасибо за ваш ответ, я использовал эту работу несколько дней назад, чтобы исправить проблему со службами oData на машине разработки. Однако это не сработало для текущей проблемы. Может еще что посоветуете... - person Ahmad Ahsan; 10.03.2015

Когда я попытался отправить вызов API из сети, все работало, как и ожидалось. Дальнейшие исследования показывают, что политика сетевого брандмауэра была проблематичной. По ошибке рабочий сервер был занесен в черный список командой NOC.

Спасибо всем за ваши усилия :)

person Ahmad Ahsan    schedule 13.03.2015