Ядро ASP.NET с IIS - HTTP-глагол не разрешен
У нас есть веб-сайт ASP.NET Core 2.0, в котором также представлены несколько простых методов веб-API для улучшения пользовательского интерфейса.
Веб-API вызывает работу, как ожидается, при запуске локально в IIS Express, но когда мы развертываем на нашем веб-сервере для производства IIS 8.5, мы получаем следующую ошибку при выполнении запросов HTTP DELETE
и PUT
...
405 Method Not Allowed
После некоторого поиска в Интернете мы обнаружили несколько сообщений, в которых предлагается удалить модуль IIS WebDAV. Мы отключили это в IIS (это наш сервер), и мы также попробовали следующее:
- Отключено WebDAV
- Включить WebDev и установить
Allow verb filtering = False
- Установите Hander Mappings, чтобы разрешить использование всех глаголов в настройках ограничений на
aspNetCore
: aspNetCore
, WebDAV
и ExtensionlessUrlHandler-Integrated-4.0
Ни один из вышеперечисленных шагов не разрешил нашу проблему.
Любые советы/направления будут высоко оценены.
Ответы
Ответ 1
После нескольких часов исследований и испытаний и ошибок исправление кажется довольно простым. Добавьте файл Web.config
в приложение.NET Core 2.0:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- To customize the asp.net core module uncomment and edit the following section.
For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="aspNetCore" />
<remove name="WebDAV" />
<!-- I removed the following handlers too, but these
can probably be ignored for most installations -->
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="aspNetCore"
path="*"
verb="*"
modules="AspNetCoreModule"
resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%"
arguments="%LAUNCHER_ARGS%"
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
Надеюсь это поможет.
Ответ 2
Это то, что сработало для меня (netcore 2.0)
<system.webServer>
<modules runAllManagedModulesForAllRequests="false">
<remove name="WebDAVModule" />
</modules>
</system.webServer>
Ответ 3
Чтобы вообще запретить включение WebDav, удалите следующую запись из ApplicationHost.config:
<add name="WebDAVModule" />
Запись находится в разделе модулей.
Точное местоположение конфига:
C:\Windows\System32\Inetsrv\Config\applicationHost.config
Это хорошо сработало для меня в .Net Core 2.1
Ответ 4
Удалите публикацию WebDAV с сервера IIS. Его подпадают под услугу Интернет-информации → Общие функции Http
https://ignas.me/tech/405-method-not-allowed-iis/
Ответ 5
Что касается меня, я решил эту проблему после того, как заметил, что пытаюсь разместить сообщение в клиентском домене вместо API. [Facepalm]
Ответ 6
Мы тестировали только на IIS 8.5 и.NET Core 2.0, поэтому я не могу действительно комментировать. Все, что я могу сделать, это предложить вам попробовать, посмотреть, работает ли он и посмотреть приложение и журналы IIS - скрестили пальцы!