Ядро 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 - скрестили пальцы!