Agradeço qualquer ajuda, pois o site deve ir ao ar hoje à noite!
Eu tenho um controlador de API da web com um método Delete. O método é executado bem em minha máquina local executando o IIS Express (Windows 8), mas assim que o implantei no servidor IIS ativo (Windows Server 2008 R2), ele parou de funcionar e gerou a seguinte mensagem de erro:
Erro HTTP 405.0 - Método não permitido A página que você está procurando não pode ser exibida porque um método inválido (verbo HTTP) está sendo usado
Procurei soluções na web e implementei as mais razoáveis. Minha configuração da web tem as seguintes configurações:
<system.webServer>
<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,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
Também tentei alterar os mapeamentos do manipulador e a filtragem de solicitações no IIS sem sucesso. Observe que as regras de criação de WebDAV no IIS parecem estar desabilitadas.
Todas as idéias serão muito apreciadas Obrigado.
Em alguns casos, removê-lo apenas dos módulos pode produzir o próximo erro:
solução foi sugerida aqui . Também é necessário removê-lo dos manipuladores.
fonte
No meu caso, nenhuma das soluções acima estava funcionando. Isso aconteceu porque eu tinha alterado o nome do parâmetro em meu
Delete
método.eu tinha
ao invés de
Preciso usar o
id
nome porque é o nome que está declarado em meuWebApiConfig
arquivo. Observe oid
nome na terceira e quarta linhas:Eu tenho essa solução a partir daqui .
fonte
O
DELETE
verbo Javascript para HTTP deve ser assim:Você não usar algo como isto:
como quando você usa o
POST
método.fonte
Depois de tentar quase todas as soluções aqui, funcionou para mim. Adicione isso em seu arquivo de configuração de APIs
fonte
Se você estiver usando o IIS 7.0 ou uma versão posterior. Esse problema está relacionado principalmente ao módulo de extensão WebDAV no servidor IIS. isso aconteceu durante o uso da ação Publicar OU excluir.
Por favor, tente a configuração abaixo na configuração da web
fonte
Eu também tive o mesmo problema, estou ligando para o WebAPi e estou recebendo este erro. Adicionar a seguinte configuração em web.config para serviços resolveu meu problema
no arquivo web.config resolveu meu problema. É assim que eu estava ligando do lado do cliente
fonte
Acesse o arquivo applicationHost.config (geralmente em C: \ Windows \ System32 \ inetsrv \ config) e comente a linha a seguir em applicationHost.config
1) Em <handlers>:
2) Comente também o módulo a seguir, sendo referido pelo manipulador acima em <modules>
fonte
No meu caso, esqueci de adicionar
{id}
ao[Route("")]
e recebi o mesmo erro. Adicionar isso resolveu o problema para mim:[Route("{id}")]
fonte
Tive o erro 405 Método não permitido porque omiti tornar público o método Delete no controlador WebApi.
Levei muito tempo para encontrar isso (muito tempo!) Porque eu esperava um erro Não encontrado neste caso, então eu estava incorretamente assumindo que meu método Delete estava sendo negado.
O motivo de Não permitido em vez de Não encontrado é que eu também tinha um método Get para a mesma rota (que será o caso normal ao implementar REST). A função pública Get é correspondida pelo roteamento e então negada devido ao método http incorreto.
Um erro simples, eu sei, mas pode economizar algum tempo para outra pessoa.
fonte
Apenas para adicionar. Se esta é a sua configuração
continue fazendo como o Hugo disse, e não defina o atributo Route para o método get do controlador, isso deu um problema no meu caso.
fonte
Eu tive o problema semelhante, mas para PUT - nenhuma das outras sugestões funcionou para mim.
No entanto, eu estava usando o id
int
em vez do padrãostring
. adicionar{id:int}
à rota resolveu meu problema.fonte
Tivemos que adicionar cabeçalhos personalizados ao nosso web.config, pois nossa solicitação tinha vários cabeçalhos que confundiam a resposta da API.
fonte
O atributo [HttpPost] na parte superior do método Delete resolveu este problema para mim:
fonte
data
(ou seja, o corpo da solicitação) em vez deparams
(ou seja, o url da solicitação) no lado do cliente.