“метод 405 не разрешен” для метода “УДАЛИТЬ”

#asp.net-core #iis

#asp.net-ядро #iis

Вопрос:

Я получаю «Метод 405 не разрешен» при попытке удаления в моей промежуточной среде.

Есть ли что-то, на что я должен обратить внимание?

Когда я запускаю его на своем локальном компьютере (IIS 10.0), он работает нормально и может удалять идентификатор, но когда я запускаю его в своей промежуточной среде, он не работает и возвращает ошибку 405 в swagger.

Кажется, что это происходит только для всех конечных точек удаления

Вот как я реализовал конечные точки удаления:

 [HttpDelete]
[Route("{Id}")]
  

текущий вывод из заголовка ответа:

 allow: GET, HEAD, OPTIONS, TRACE 
content-length: 1293 
content-type: text/html 
date: Mon, 14 Sep 2020 04:15:15 GMT 
server: Microsoft-IIS/8.5 
x-powered-by: ASP.NET 
x-powered-by-plesk: PleskWin
  

У меня есть текущая настройка для моего startup.cs

 private static void ConfigureCors(IServiceCollection services)
{
  services.AddCors(o => o.AddPolicy("testAppPolicy", builder =>
  {
     builder.AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader()
            .Build();
 }));
}
  

Я знаю, что это довольно расплывчатый вопрос, но есть какие-нибудь советы о том, где я мог бы начать искать способы отладки этой ситуации?

Ответ №1:

Согласно вашему описанию и сообщению об ошибке, я предлагаю вам сначала убедиться, что вы установили правильный asp.net модуль ядра для промежуточного сервера.

Тогда я предлагаю вам попробовать удалить WebDAVModule на сервере IIS.

Для получения дополнительной информации вы можете попробовать изменить формат web.config, приведенный ниже.

 <?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <modules>
            <remove name="WebDAVModule" />
        </modules>
        <handlers>
            <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" />
        </handlers>

        <aspNetCore processPath="yourasp.net core config" 
                    stdoutLogEnabled="false"
                    stdoutLogFile=".logsstdout" />
    </system.webServer>
</configuration>
  

Комментарии:

1. В моем решении нет файла конфигурации, только launchsettings.json

2. Потому что, поскольку это .net core, я использую файлы json

3. Если вы размещаете приложение на сервере IIS, вам понадобится файл web.config. Размещаете ли вы свое приложение на сервере IIS?