Escrevi serviço REST usando ASP.NET Web API. Estou tentando enviar uma solicitação HttpDelete, mas recebo o seguinte erro:
405 - Verbo HTTP usado para acessar esta página não é permitido
Acho que estou perto da solução, descobri que devo habilitar o gerenciamento remoto do IIS, ir para a seção Handler Mappings e adicionar o verbo DELETE na posição apropriada ... mas o problema é que há várias posições diferentes no a lista ... (como aqui: http://www.somacon.com/p126.php ).
Qual devo editar? Poucos deles não têm extensão, por exemplo, "ExtensionUrlHandler-Integrated-4.0" e adicionei o verbo DELETE, mas ainda não funciona ...
Foi apenas um tiro no escuro para modificar aquele, então devo modificar uma posição diferente? Se sim, qual? Ou talvez haja mais alguma coisa que eu deva fazer?
O mesmo serviço web funciona perfeitamente bem no meu serviço local, então acho que o problema é com o IIS remoto ...
saudações
Respostas:
A causa comum para esse erro é WebDAV . Certifique-se de desinstalá-lo.
fonte
Você não precisa desinstalar o WebDAV, apenas adicione estas linhas ao web.config:
fonte
Altere seu arquivo Web.Config conforme abaixo
fonte
Altere seu arquivo Web.Config conforme abaixo. Vai funcionar como um encanto.
No nó,
<system.webServer>
adicione a parte do código abaixoApós adicionar, seu Web.Config ficará assim abaixo
fonte
Eu tive esse problema e resolvi o seguinte:
Selecione o site de back-end
na visualização de recursos: abra o Mapeamento de Manipulador
fonte
Se nenhuma das soluções acima resolveram seu problema como no meu caso (ainda preso com meu módulo RestClient voltado para 405), tente solicitar sua Api com uma ferramenta como Postman ou Fiddler. Quer dizer, o problema pode estar em outro lugar, como uma solicitação formatada incorretamente.
Descobri que meu módulo RestClient estava pedindo um 'Put' com um parâmetro de Id não bem formatado:
ao invés de
Incidentemente, a solicitação formatada incorretamente retorna 405 - Método não permitido (IIS 7.5)
fonte
Incomum, mas pode ajudar alguns.
Estávamos recebendo um 'Método não permitido' 405, em um método decorrated HttpPut.
Nosso problema parece ser incomum, pois acidentalmente usamos o atributo [HttpPut] de System.Web.Mvc e não System.Web.Http
O motivo é que o resharper sugeriu a versão .Mvc, onde, como normalmente, System.Web.Http já é referenciado quando você deriva diretamente de ApiController , estávamos usando uma classe que estendia ApiController.
fonte
Isso aconteceu (método 405 não permitido) quando o método post da API da Web que eu estava chamando tinha tipos primitivos para parâmetros, em vez de um tipo complexo que era acessado do corpo. Igual a:
Isso funcionou:
Isso não:
fonte
Este erro vem do manipulador de staticfile - que por padrão não filtra nenhum verbo, mas provavelmente só pode lidar com HEAD e GET.
E isso ocorre porque nenhum outro manipulador se aproximou e disse que poderia lidar com DELETE.
Como você está usando a WEBAPI, que devido ao roteamento não tem arquivos e, portanto, extensões, as seguintes adições precisam ser adicionadas ao seu arquivo web.config:
Obviamente, o que é necessário depende do modo clássico versus modo integrado, e o modo clássico depende do número de bits. Além disso, o cabeçalho OPTIONS foi adicionado para o processamento do CORS, mas se você não fizer o CORS, não precisará dele.
Para sua informação, seu web.config é o local para a versão do aplicativo (ou diretório do aplicativo) cujo nível superior é applicationHost.config.
fonte
Se for IIS 8.0, verifique se a ativação HTTP está habilitada. Gerenciador de servidor -> IIS -> Gerenciar (veja o canto superior direito) -> Adicionar funções e recursos -> ... -> vá para a configuração do WCF e selecione Ativação HTTP.
fonte
Em nosso caso, o problema era com o signon federado entre um site .Net e o ADFS. Quando redirecionando para os ADFS endpoint o
wctx
parâmetro necessário todos os três parâmetros para oWSFederationAuthenticationModule.CreateSignInRequest
método:rm
,id
eru
Obrigado a Guillaume Raymond pela dica para verificar os parâmetros de URL!
fonte
Além de todas as soluções acima, verifique se você tem o "
id
" ou qualquer parâmetro definido pelo usuário noDELETE
método que corresponda à configuração da rota.Se você obtiver erros 405 repetidos, é melhor redefinir a assinatura do método para o padrão como acima e tentar.
A configuração da rota, por padrão, procurará
id
na URL. Portanto, o nome do parâmetroid
é importante aqui, a menos que você altere a configuração da rota naApp_Start
pasta.Você pode alterar o tipo de dados do
id
embora.Por exemplo, o método abaixo deve funcionar bem:
Observação: também certifique-se de passar os dados pela url e não pelo método de dados que carregará a carga útil como conteúdo do corpo.
Exemplo:
Espero que ajude.
fonte
Vou adicionar para aqueles que ficam presos tentando correr
PHP
(Laravel
em caso) ou outraIIS
situação de hospedagem exclusiva com o405 error
, que você precisa alterar overbs
no manipulador para aquela situação específica ... então, como eu estava usandoPHP
, fui para oPHP
manipulador e na guiaRequest Restrictions
e, em seguidaVerbs
, adicione o queverbs
você precisa. Isso era tudo que eu precisava para adicionar aoweb.config
habilitar oCORS
noLaravel
.fonte
Nenhuma das opções acima funcionou para mim e eu estava resolvendo problemas ao usar uma página de suporte ( https://support.microsoft.com/en-us/help/942051/error-message-when-a-user-visits-a-website -that-is-hosting-on-a-server) então comparei o arquivo host do aplicativo com uma cópia de trabalho e parece que faltavam vários manipuladores e quando os adicionei de volta ao host do aplicativo, comecei a funcionar. Eu estava sentindo falta de tudo isso,
fonte