Recentemente, atualizei do Visual Studio 2010 para o Visual Studio 2012 RC. O instalador também instala o IIS 8 Express, que o Visual Studio agora usa como servidor da web padrão.
O IIS 8 está bloqueando minhas solicitações de API da Web que usam verbos PUT AND DELETE. O IIS retorna um erro 405 The requested resource does not support http method 'PUT'
,.
Sei que as pessoas têm problemas com isso no passado e há várias mensagens sobre isso no Stack Overflow. Com o IIS 7 Express, a solução foi desinstalar o WebDav. Infelizmente, não vejo nenhuma maneira de fazer isso com o IIS 8.
Eu tentei editar as seções WebDav do applicationhost.config, mas isso não ajudou. Por exemplo, eu removi <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
do arquivo de configuração.
Eu gastei muito tempo nisso. Deve haver uma maneira simples de ativar PUT e DELETE?
fonte
ExtensionlessUrl-Integrated-4.0
.Respostas:
OK. Finalmente cheguei ao fundo disso. Você precisa percorrer algumas etapas para que os verbos PUT e DELETE funcionem corretamente com o IIS8. De fato, se você instalar o candidato a lançamento do VS 2012 e criar um novo projeto de API da WEB, verá que os métodos PUT e DELETE de amostra retornam erros 404 imediatamente.
Para usar os verbos PUT e DELETE com a API da Web, você precisa editar% userprofile% \ documents \ iisexpress \ config \ applicationhost.config e adicionar os verbos ao manipulador ExtensionlessUrl da seguinte maneira:
Mude esta linha:
para:
Além do acima, você deve garantir que o WebDAV não esteja interferindo em suas solicitações. Isso pode ser feito comentando as seguintes linhas em applicationhost.config.
Lembre-se também de que a convenção padrão da API da Web é que o nome do seu método seja igual ao verbo HTTP invocado. Por exemplo, se você estiver enviando uma solicitação de exclusão HTTP, seu método, por padrão, deverá ser chamado de Excluir.
fonte
WebDAVModule
seção dos módulos, conforme resposta de Santosh Sah .Altere o arquivo Web.Config como abaixo. Agirá como charme.
No nó,
<system.webServer>
adicione abaixo a parte do códigoApós adicionar, o seu Web.Config será semelhante a abaixo
fonte
WebDAVModule
é relevante."ExtensionlessUrlHandler-Integrated-4.0"
(como na resposta acima), enquanto o IIS 8.5 renomeou o nome para"ExtensionlessUrl-Integrated-4.0"
(também mencionado por Mark S. O nome do manipulador é mostrado em a página de erro do IIS, uma vez que você receber o erro, por isso deve ser trivial para saber qual a set Eu uso ambos os nomes, a fim de suportar diferentes ambientes de hospedagem..Remover o WebDAV funciona perfeitamente para o meu caso:
é sempre melhor resolver o problema através do web.config em vez de corrigi-lo através do iis ou machine.config para garantir que isso não aconteceria se o aplicativo hospedasse em outra máquina
fonte
Atualize seu web.config
http://odetocode.com/blogs/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx
Remove a necessidade de modificar suas configurações de host.
fonte
Na API da Web do Asp.Net - webconfig. Isso funciona em todos os navegadores.
Adicione o seguinte código dentro da marca System.web
Substitua a tag system.webserver pelo código abaixo
fonte
system.webserver
seção deve ser suficiente - verifique se você tem o nome correto para o manipulador de URL sem extensão.isso funcionou para mim no iis8, juntamente com algumas das outras respostas. Meu erro foi um 404.6 especificamente
fonte
Apenas uma atualização rápida para qualquer pessoa que possa encontrar esse problema. Atualmente, a alteração do% userprofile% \ documents \ iisexpress \ config \ applicationhost.config NÃO funciona mais (isso funcionava bem até agora, não tendo certeza se isso se deve a uma atualização do Windows). Após horas de frustração, mudei o web.config para adicionar esses manipuladores ao system.webserver para fazê-lo funcionar:
fonte
Ativar CORS (agradável e arrumado)
1.Add pacote de pepitas CORS
2. No arquivo WebApiConfig.cs para o método Register, adicione o seguinte código:
ex:
using System.Web.Http;
3.Adicione o código abaixo ao namespace do controller, incluindo get, post, delete, put ou qualquer método http
ex:
referência: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
fonte
Depois que nada funcionou, consegui resolver isso seguindo as etapas abaixo:
• Não selecionou as configurações do IIS 'WEB DAV PUBLISHING' durante a instalação do IIS. • INETMGR - site padrão - filtragem de solicitações - verbos HTTP - PUT como verdadeiro
fonte
Após inúmeras pesquisas e tentativas das respostas já fornecidas (adicionando os verbos PUT, DELETE e remova o WEBdav), simplesmente não funcionou.
Eu fui para as configurações de log do IIS:> Exibir arquivos de log. No meu caso, W3SVC4 foi a pasta com a data mais recente, abriu a pasta, procurou o arquivo de log mais recente e viu esta entrada: GET / Rejeitado por UrlScan ~ / MYDOMAIN / API / ApiName / UpdateMETHOD
O método Update foi listado com o verbo GET, estranho, certo? Pesquisei no Google Rejeitado por UrlScan e encontrei este link: UrlScan Quebrou meu blog .
Eu fui para aqui:% windir% \ system32 \ inetsrv \ urlscan \ UrlScan.ini
Basicamente, o UrlScan bloqueou os verbos PUT e DELETE. Abri esse arquivo INI, adicionei PUT e DELETE ao AllowVerbs e os removi das listagens DenyVerbs. Salvei o arquivo INI e funcionou! Então, para mim, essas etapas foram necessárias ao lado das dicas ExtensionlessUrlHandler.
Servidor Web do Windows 2008 R2 (64 bits), IIS 7.5. Estou usando isso em combinação com o DotNetNuke (DNN) WebAPI. ASP.Net 4.0 Meu método de atualização:
fonte
Para PHP, era simplesmente:
Eu imagino que isso funcionará com outros manipuladores também.
fonte
Além de todas as soluções acima, verifique se você tem o " id " ou algum parâmetro definido personalizado no método DELETE que corresponde à configuração da rota.
Se você acertar com erros repetidos 405, redefina melhor a assinatura do método para o padrão, como acima, e tente.
A configuração da rota, por padrão, procurará o ID no URL. Portanto, o nome do parâmetro id é importante aqui, a menos que você altere a configuração da rota na pasta App_Start .
Você pode alterar o tipo de dados do ID .
Por exemplo, o método abaixo deve funcionar bem:
Nota: Verifique também se você passa os dados pela URL e não pelo método de dados que transportará a carga como conteúdo do corpo.
Exemplo:
Espero que ajude.
fonte
Eu enfrentei o mesmo problema com você e, em seguida, resolvi-o. Aqui estão as soluções, desejo que talvez possa ajudar
Primeira
Na
modules
configuração do IIS , faça um loop do WebDAVModule , se o servidor da web tiver, e remova-oSegundo
Na
handler mappings
configuração do IIS , você pode ver a lista de manipuladores ativadores, para escolherthe PHP item
, editá-lo, na página de edição, clique no botão de solicitação de restrições e, em seguida, selecionethe verbs tab
no modal, especifique os verbos a serem manipulados, verifique oall verbs radio
e clique em ok, talvez você também veja um aviso, ele mostra que usamos aspas duplas na execução do PHP-CGI e, em seguida, faça issoSe tiver feito, reinicie o servidor IIS; tudo ficará bem
fonte
Não tenho certeza se você editou o arquivo de configuração correto. Tente seguir as etapas
abra% perfil de usuário% \ ducuments \ iisexpress \ config \ applicationhost.config
Por padrão, as entradas fornecidas são comentadas no arquivo applicationhost.config. descomente essas entradas.
fonte
Aqui está como você permite verbos HTTP extras usando a GUI do Gerenciador do IIS.
No Gerenciador do IIS, selecione o site que você deseja permitir PUT ou DELETE.
Clique na opção "Solicitar filtragem". Clique na guia "HTTP Verbs".
Clique no link "Permitir verbo ..." na barra lateral.
Na caixa exibida, digite "DELETE", clique em OK.
Clique no link "Permitir verbo ..." na barra lateral novamente.
Na caixa que aparece, digite "PUT", clique em OK.
fonte
Estou usando um arquivo ashx em um aplicativo MVC e nenhuma das respostas acima funcionou para mim. IIS 10.
Aqui está o que funcionou. Em vez de alterar " ExtensionlessUrl-Integrated-4.0 " no IIS ou web.config, alterei " SimpleHandlerFactory-Integrated-4.0 " para arquivos " * .ashx ":
fonte
O outro motivo pode ser o seguinte:
Alterei meu método URL para API da Web de acordo com esta resposta :
Mas esse método cria um link como:
Isso funciona corretamente com solicitações GET e POST, mas não com PUT ou DELETE.
Então eu apenas substituí-lo por:
e resolveu o problema.
fonte
No IIS 8.5 / Windows 2012R2, nada mencionado aqui funcionou para mim. Não sei o que significa remover o WebDAV, mas isso não resolveu o problema para mim.
O que me ajudou foram os passos abaixo;
Agora tudo está funcionando.
fonte
Você pode converter seu método Delete como POST como;
fonte