Веб-API ASP.NET - POW & DELETE Дієслова не дозволено - IIS 8


145

Нещодавно я перейшов з Visual Studio 2010 до Visual Studio 2012 RC. Інсталятор також встановлює IIS 8 Express, який Visual Studio тепер використовує як веб-сервер за замовчуванням.

IIS 8 блокує мої запити WEB API, які використовують дієслова PUT AND DELETE. IIS повертає помилку 405, The requested resource does not support http method 'PUT'.

Я знаю, що у людей були проблеми з цим у минулому, і є кілька повідомлень про це в Stack Overflow. Завдяки IIS 7 Express рішенням було видалення WebDav. На жаль, я не бачу жодного способу зробити це з IIS 8.

Я спробував редагувати розділи WebDav з applicationhost.config, але це не допомогло. Наприклад, я видалив <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />з конфігураційного файлу.

Я надто довго витратив на це. Має бути простий спосіб включити PUT і DELETE?


Це все ще зламано у версії RTM. На це просто витратили 3 години ... Все, що потрібно було, - це додати зайві дієслова ExtensionlessUrl-Integrated-4.0.
леппі

1
Я не думаю, що це порушено, але це задум. Я думаю, що зміна поведінки за замовчуванням заважатиме WebDAV та порушує сумісність. Це також не працювало з IIS7, коли було встановлено WebDAV.
Марк

Я також просто витрачав 3 години на це ... 6 років після цієї посади.
Брайан Дженкінс

будь ласка , подивіться на stackoverflow.com/a/55134621/4746570
BehrouzMoslem

Відповіді:


162

Добре. Я нарешті дійшов до цього. Вам потрібно перестрибнути кілька обручів, щоб отримати дієслова PUT і DELETE правильно працювати з IIS8. Насправді, якщо встановити кандидат на випуск VS 2012 та створити новий проект WEB API, ви побачите, що вибірки методів PUT та DELETE повертають 404 помилки з поля.

Щоб використовувати дієслова PUT і DELETE з веб-API, вам потрібно відредагувати% userprofile% \ dokumenti \ iisexpress \ config \ applicationhost.config та додати дієслова до обробника ExtensionlessUrl наступним чином:

Змініть цей рядок:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

до:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

На додаток до вищезазначеного слід переконатися, що WebDAV не заважає вашим запитам. Це можна зробити, коментуючи наступні рядки з applicationhost.config.

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
<add name="WebDAVModule" /> 
<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />

Також пам’ятайте, що за замовчуванням веб-API умовою є те, що назва вашого методу має бути таким же, як і викликане HTTP-дієслово. Наприклад, якщо ви надсилаєте запит на видалення HTTP, ваш метод за замовчуванням повинен бути названий Видалити.


9
Для подібних проблем з дієсловом OPTIONS на IIS8 (де щось інше перехоплює перед вашими обробниками), спробуйте <Remove name = "OPTIONSVerbHandler" /> у своєму web.config. З цього приводу я б радив використовувати техніку "видалити" у вашому локальному web.config над тим, щоб возитися з applicationhost.config, коли це можливо, як загальне правило
Jason

7
Замість того, щоб видаляти WebDAV на рівні сервера, який може мати наслідки збивання, краще видалити його з вашого проекту, як показано тут: stackoverflow.com/a/14465655/428280
Twisted

І що тоді? Можливо, це буде працювати локально, але не працюватиме на Azure
Toolkit

3
Відповідь, яка вказує на зміну системних налаштувань, навіть на розробниках, не може бути відповіддю. Це вирішує симптом і не дуже допомагає командам та виробництву. Чи будете ти повторювати це на кожній машині? Перевірте відповідь Сантоша Са.
Андре Верланг

Крім того, мені також потрібно було зняти WebDAVModuleз розділу модулі, відповідно до відповіді Сантоша Саха .
Івайло Славов

125

Змініть файл Web.Config, як показано нижче. Це буде діяти як шарм.

У вузлі <system.webServer>додайте нижче частину коду

<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
</modules>

Після додавання ваш Web.Config буде виглядати нижче

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/>
    </modules>
    <httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
    </httpProtocol>
    <handlers>
      <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" />
    </handlers>
</system.webServer>

3
Видалення WebDavModule - це правильний спосіб вирішити цю проблему.
MissRaphie

6
Врятував мій день: <модулі runAllManagedModulesForAllRequests = "true"> <delete name = "WebDAVModule" /> </modules>
Peter Stegnar

3
Спеціальні заголовки не повинні бути потрібними, оскільки вони пов'язані з CORS, і таким чином ви спонукаєте до отвору в безпеці. Тільки частина, що стосується, WebDAVModuleє актуальною.
Андре Верланг

2
Ця відповідь правильна за єдиним винятком, що ім'я обробника може відрізнятись у версіях IIS - наприклад, 7.5 використовує "ExtensionlessUrlHandler-Integrated-4.0"(як у відповіді вище), тоді як IIS 8.5 перейменовано на "ExtensionlessUrl-Integrated-4.0"(також згадується Марком С. Ім'я обробника показано в Сторінка помилок IIS, як тільки ви отримаєте помилку, тому слід знати, що встановити. Я використовую обидва імена для підтримки різних середовищ хостингу.
Івайло Славов,

7
Це змушує мене трохи померти всередині кожного разу, коли я бачу це - runAllManagedModulesForAllRequests = "true" - як рішення britishdeveloper.co.uk/2010/06/…
Олівер

61

Видалити WebDAV ідеально підходить для мого випадку:

<modules>
  <remove name="WebDAVModule"/>
</modules>
<handlers>
  <remove name="WebDAV" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.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" />
</handlers>

завжди краще вирішити проблему через web.config замість того, щоб виправляти її через iis або machine.config, щоб отримати це не відбудеться, якби додаток розміщено на іншій машині


Це працювало для мене, де інші чомусь не зверталися (був на IIS 8.5) дякую
Іван

4
Видалити WebDAVModule працював на мене, не потрібно видаляти обробник WebDAV (IIS 8.0).
PeterS

3
просто видалення webdav працює на базі 4.6.2 iis8.5
Абдул Рехман

45

Оновіть свою web.config

  <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrl-Integrated-4.0" />
      <add name="ExtensionlessUrl-Integrated-4.0"
           path="*."
           verb="GET,HEAD,POST,DEBUG,DELETE,PUT"
           type="System.Web.Handlers.TransferRequestHandler"
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

http://odetocode.com/blogs/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx

Вилучає необхідність змінювати конфігурації хоста.


1
Мені вже писали інший рядок, але він не працював. після додавання рядків <delete name = "WebDAVModule" /> та <delete name = "WebDAV" /> він працює зараз. Велике спасибі та 1 голос вгору з моєї сторони.
Банкетешвар Нараян

Це працює, але може вийти з ладу через блокування конфігурації, що запобігає використанню <modules> у web.config. У цьому випадку вам слід відключити блокування конфігурації в applicationHost.config. Якщо ви з якоїсь причини не маєте контролю над applicationHost.config, такий підхід використовувати не можна.
Флоріан Зима

Працював з IIS10, хоча я просто використовував "*" як дієслово
Хав'єр Г.

1
Працював з IIS 10 та Web API 2. Працював, додам, після ще одного десятка «рішень», які я знайшов в Інтернеті, не став. Дякую!
Метт Вест

@ChrisMarisic: Це спрацювало як шарм для мене спасибі!
Div Tiwari

18

У веб-API Asp.Net - webconfig. Це працює у всіх браузерах.

Додайте наступний код у тег System.web

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

Замініть тег system.webserver цим кодом нижче

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="false">
  <remove name="WebDAVModule" />
</modules>

<validation validateIntegratedModeConfiguration="false" />
<handlers>
  <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" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>


У мене була проблема в IIS 7.5, і це виправлення працювало чудово. Замість того, щоб видаляти весь вміст system.webserver, я просто об'єднав відповідні налаштування вище в свої власні налаштування.
Кіт Уолтон

38
ПОПЕРЕДЖЕННЯ . Розділ користувальницьких заголовків у наведеному вище коді дозволяє будь-якому сайту зателефонувати на ваш API з браузера - що є великим ризиком для безпеки . Прочитайте про CORS, що ефективно дає змогу цим заголовкам.
profMamba

Також було це питання в iis 7.5, і це спрацювало. Не забудьте прочитати вищезгадане повідомлення Toolkit про ризик, пов'язаний із відкриттям корів для всіх. Крім того, підтримайте його коментар, оскільки такі примружки дуже цінні.
sjdirect

Я не думаю, що вам взагалі потрібні власні заголовки. Решти system.webserverрозділу має бути достатньо - просто переконайтеся, що ви маєте правильну назву для необмеженого обробника URL-адреси.
Івайло Славов

1
@niico Ви повинні дозволити лише довіреним веб-сайтам отримувати доступ до контролю-дозволу, тобто замінити "*" URL-адресою вашого веб-сайту. Цей ресурс є білим списком усіх надійних сайтів, якщо ви не хочете довіряти всій мережі (що зазвичай погана ідея).
profMamba

5

це працювало для мене на iis8 разом з деякими іншими відповідями. Моя помилка конкретно була 404,6

<system.webServer>
  <security>
  <requestFiltering>
    <verbs applyToWebDAV="false">
       <add verb="DELETE" allowed="true" />
    </verbs>
  </requestFiltering>
  </security>
</system.webServer>

коли ви запускаєте AppCmd, це те, що вкладається у ваш web.Config (за винятком біта applyToWebDAV).
Чейз Флорелл

5

Просто швидке оновлення для всіх, хто може зіткнутися з цією проблемою. На сьогоднішній день зміна% userprofile% \ dokumenti \ iisexpress \ config \ applicationhost.config більше не працює (це працювало нормально до цього часу, не впевнений, чи це пов’язано з оновленням Windows). Після годин розчарувань я змінив web.config, щоб додати ці обробники до system.webserver, щоб змусити його працювати:

<handlers>
        <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" />
    </handlers>

4

Увімкнути CORS (приємно та акуратно)

1.Додайте нульовий пакет CORS

Install-Package microsoft.aspnet.webapi.cors

2.в файлі WebApiConfig.cs до методу Реєстрація додайте наступний код:

config.EnableCors();

напр .:
використання System.Web.Http;

namespace test
{
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services


        config.EnableCors(); //add this**************************


        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );           
    }
}
}

3.Додайте наступний код у простір імен контролера: get, post, delete, put або будь-який метод http

[EnableCors(origins: "The address from which the request comes", headers: "*", methods: "*")]

колишній:

using System.Web.Http.Cors;//add this******************************
namespace Test.Controllers
{
[EnableCors(origins: "http://localhost:53681/HTML/Restaurant.html", headers: "*", methods: "*")]
public class RestaurantController : ApiController
{
    protected TestBusinessLayer DevTestBLL = new TestBusinessLayer();

    public List<Restaurant> GET()
    {
        return DevTestBLL.GetRestaurant();
    }

    public List<Restaurant> DELETE(int id)
    {
        return DevTestBLL.DeleteRestaurant(id);
    }       
}
}

довідка: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api


4

Після нічого не вийшло, я зміг вирішити це за допомогою наступних кроків:

• Не вибрав налаштування IIS "WEB DAV PUBLISHING" під час встановлення IIS. • INETMGR - Веб-сайт за замовчуванням - Запрошення фільтрування - HTTP Verbs - PUT as True


3

Після нескінченного пошуку та спробу вже наданих відповідей (додавання PUT, DELETE дієслів та видалення WEBdav) це просто не спрацювало.

Я перейшов до налаштувань журналу IIS:> Переглянути файли журналів. У моєму випадку W3SVC4 була папкою з останньою датою, відкрила папку, знайшла останній файл журналу і побачила цей запис: GET / Rejected-By-UrlScan ~ / MYDOMAIN / API / ApiName / UpdateMETHOD

Метод оновлення був перелічений з дієсловом GET, дивно, правда? Тож я заглянув у Google для відхилених від UrlScan і знайшов це посилання: UrlScan зламав мій блог .

Я перейшов сюди:% windir% \ system32 \ inetsrv \ urlscan \ UrlScan.ini

В основному, UrlScan заблокував дієслова PUT і DELETE. Я відкрив цей файл INI, додав PUT і DELETE до AllowVerbs і видалив їх із списків DenyVerbs. Я зберегла файл INI, і він працював! Тому для мене ці кроки були необхідні поруч із підказками ExtensionlessUrlHandler.

Веб-сервер Windows 2008 R2 (64 біт), IIS 7.5. Я використовую це в поєднанні з WebAPI DotNetNuke (DNN). ASP.Net 4.0 Мій метод оновлення:

[HttpPut]
[DnnAuthorize(StaticRoles = "MyRoleNames")]
public HttpResponseMessage UpdateMETHOD(DTO.MyObject myData)

3

Для PHP це було просто:

  1. Відкрити IIS
  2. Перейдіть до відображення обробника
  3. натисніть правка на php5.6.x або php7.0.x
  4. натисніть "запит на обмеження"
  5. на вкладці дієслів виберіть "одне з наступних дієслів" і додайте "ЗАРАЗ, ГОЛОВА, ПОСТ, ПУТЬ, ПАТЧ, УДАЛИТИ, ОПЦІЇ"

Я думаю, це буде працювати і з іншими обробниками.


2

Крім усіх вищезазначених рішень, перевірте, чи є у вас " id " або якийсь визначений на замовлення параметр у методі DELETE відповідає маршруту конфігурації.

public void Delete(int id)
{
 //some code here
}

Якщо ви потрапили з повторними помилками 405, краще скиньте підпис методу до типового значення, як зазначено вище, і спробуйте.

Конфігурація маршруту за замовчуванням шукатиме ідентифікатор у URL-адресі. Тому ідентифікатор імені параметра важливий тут, якщо ви не змінили конфігурацію маршруту в папці App_Start .

Ви можете змінити тип даних ідентифікатора .

Наприклад, наведений нижче метод повинен працювати чудово:

public void Delete(string id)
{
 //some code here
}

Примітка. Також переконайтеся, що ви передаєте дані через URL, а не метод даних, який несе корисний навантаження як вміст тіла.

DELETE http://{url}/{action}/{id}

Приклад:

DELETE http://localhost/item/1

Сподіваюся, це допомагає.


2

Я зіткнувся з тією ж проблемою, потім вирішив її, ось рішення, я б хотів, щоб це могло допомогти
в першу чергу

У modulesконфігурації IIS зациклюйте WebDAVModule , якщо у вас є ваш веб-сервер, тоді видаліть його

Друге

У handler mappingsконфігурації IIS ви можете побачити список включення обробника, щоб вибрати the PHP item, відредагувати його, на сторінці редагування натисніть кнопку запиту обмежень, потім виберіть the verbs tabу модальному режимі, вкажіть дієслова для обробки ярлика, перевірте прапорецьall verbs radio , потім натисніть кнопку ОК, ви також можете побачити попередження, воно показує нам, що для виконання PHP-CGI використовуйте подвійні лапки, а потім зробіть це

якщо це зроблено, то перезавантажте сервер IIS, це буде добре

введіть тут опис зображення


1
Я лише видалив WebDAVModule з веб-сайту IIS, і це працювало на мене
Umair Malhi

1

Я не впевнений, чи правильно ви редагували файл конфігурації. Спробуйте виконати наступні дії

  1. відкрити% userprofile% \ ducuments \ iisexpress \ config \ applicationhost.config

  2. За замовчуванням наведені нижче дані коментуються у файлі applicationhost.config. коментувати ці записи.

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />


<add name="WebDAVModule" />
<add name="WebDAV" path="*"
 verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK"
 modules="WebDAVModule" resourceType="Unspecified" requireAccess="None"
 />

4
возитися з applicationhost.config? nope
Інструментарій

Не слід возитися з іншим, ніж файл конфігурації програми. По-перше - ви зробите це для всього сервера і забудете, тоді багато людей будуть задаватися питанням, як це працює на цій машині, а на інших не працює. Крім того, якщо вам заборонено доступ до конфігураційного файлу IIS на сервері, де розміщується програма, вам доведеться опрацювати його в web.config. Уявіть, що ваш сервер розробників має вищевказане оновлення, чи буде ваш web.config точним? Це чудовий спосіб втратити чийсь день на дослідженні того, чому виробництво не вдалося
Івайло Славов

1

Ось як ви дозволяєте додаткові дієслова HTTP за допомогою інтерфейсу інтерфейсу менеджера IIS.

  1. У IIS Manager виберіть веб-сайт, для якого потрібно дозволити PUT або DELETE.

  2. Клацніть опцію "Запити фільтрування". Перейдіть на вкладку «Дієслова HTTP».

  3. Клацніть посилання "Дозволити дієслово ..." на бічній панелі.

  4. У вікні, що з’явиться, введіть "ВІДКРИТИ", натисніть кнопку ОК

  5. Ще раз натисніть посилання "Дозволити дієслово ..." на бічній панелі.

  6. У вікні, що з’явиться, введіть "PUT", натисніть кнопку ОК.


приємна спроба - щось інше на раз - але все-таки не працювало!
ozzy432836

Я спробував усе інше, що я бачив, запропонований на ПС та в інших місцях. Нарешті я спробував це, і це спрацювало чудово. У моєму випадку дієслова PUT і DELETE вже були у списку, і я повинен був спочатку їх видалити, а потім додати їх за допомогою посилання Allow Verb ..., але все-таки воно спрацювало, коли нічого іншого не було. Дуже дякую!
JTennessen

1

Я використовую файл ashx у програмі MVC, і жоден із перерахованих вище відповідей не працював для мене. IIS 10.

Ось що зробило. Замість зміни " ExtensionlessUrl-Integrated-4.0 " в IIS або web.config я змінив " SimpleHandlerFactory-Integrated-4.0 " для файлів " * .ashx ":

<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" 
verb="GET,HEAD,POST,DEBUG,PUT,DELETE" 
type="System.Web.UI.SimpleHandlerFactory" 
resourceType="Unspecified" requireAccess="Script" 
preCondition="integratedMode,runtimeVersionv4.0" />

0

Інша причина може бути наступною:
я змінив метод URL для Web Api відповідно до цієї відповіді :

Url.Action("MyAction", "MyApiCtrl", new { httproute = "" })

Але цей метод створює посилання на кшталт:

/api/MyApiCtrl?action=MyAction

Це правильно працює з GET та POST-запитами, але не з PUT або DELETE.
Тому я просто замінив його на:

/api/MyApiCtrl

і це вирішило проблему.


0

У IIS 8.5 / Windows 2012R2 тут нічого не згадувалося. Я не знаю, що означає "Видалення WebDAV", але це не вирішило проблему для мене.

Що мені допомогло - це наступні кроки;

  1. Я пішов до менеджера IIS.
  2. На лівій панелі обраний сайт.
  3. У лівій робочій області вибрано WebDAV, відкривши його подвійним клацанням миші.
  4. На правій панелі вимкніть її.

Зараз все працює.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.