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
на производствен сървър обикновено трябва да добавите регистриране, напр. пишете на файл/db/event viewer на различни места, за да разберете до кои части от кода стига. В този случай бих проверил контролера, глобалните 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