"Metodo 405 non consentito" in IIS7.5 per il metodo "PUT"


113

Uso il WebClienttipo per caricare i file * .cab sul mio server. Sul lato server, ho registrato un gestore HTTP per il file * .cab con il metodo PUT come di seguito:

 <add name="ResultHandler" path="*.cab" verb="PUT" type="FileUploadApplication.ResultHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />

Ma ricevo sempre un errore "metodo 405 non consentito". La risposta ha detto che i metodi consentiti sono i seguenti:

Headers = {Allow: GET, HEAD, OPTIONS, TRACE
Content-Length: 1293
Content-Type: text/html
Date: Fri, 27 May 2011 02:08:18 GMT
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET}

Anche se consento esplicitamente il metodo PUT nel filtro delle richieste IIS per la mia applicazione web, si verifica lo stesso errore.

Sospetto che si tratti di un problema relativo a IIS. Spero che qualcuno possa far luce su questo per me.

Risposte:


214

Spesso questo errore è causato dal modulo WebDAV che tenta di gestire questo tipo di richieste. Una soluzione semplice è rimuoverlo dai moduli e dai gestori della system.webServersezione appena all'interno del file web.config. Ecco un esempio di configurazione:

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
    <handlers>
        <remove name="WebDAV" />
    </handlers>
</system.webServer>

2
Utilizzando il seguente articolo di MS, ho aggiunto il tag di rimozione ai gestori, ma ancora non ha funzionato. Grazie alla tua risposta vedo che dovevo aggiungerlo anche alla sezione moduli. Molto apprezzato. Ecco l'articolo: asp.net/web-api/overview/testing-and-debugging/…
Tod Birdsall

Fantastico, mi hai risparmiato ore di doloroso debug! :)
Kaspars Ozols

Soluzione semplice e facile, grazie!
MorenajeRD

L'ho provato ma non funziona per me. Ricevo ancora l'errore 405 - Metodo non consentito. Nota che sto usando IIS Express e l'errore in qualche modo si verifica solo su PUT ma funziona per GET, POST AND DELETE.
Thierry

46

Ho abilitato la traccia delle richieste non riuscite e ho ottenuto le seguenti informazioni:

 <EventData>
  <Data Name="ContextId">{00000000-0000-0000-0F00-0080000000FA}</Data>
  <Data Name="ModuleName">WebDAVModule</Data>
  <Data Name="Notification">16</Data>
  <Data Name="HttpStatus">405</Data>
  <Data Name="HttpReason">Method Not Allowed</Data>
  <Data Name="HttpSubStatus">0</Data>
  <Data Name="ErrorCode">0</Data>
  <Data Name="ConfigExceptionInfo"></Data>
 </EventData>

Quindi, ho disinstallato WebDAVModule dal mio IIS, ora va tutto bene ~

La funzionalità di traccia IIS è molto utile.


1
Grazie per la tua risposta ! Dopo 2 giorni di ricerca, l'unica soluzione di lavoro che ho trovato per evitare "405 Method Not Allowed" è stata quella di definire le intestazioni CORS nel Application_BeginRequestmetodo, come menzionato in questa risposta stackoverflow.com/a/14631068/827168 . Ma la tua risposta è migliore di tutte le altre perché aiuta a individuare il problema invece di applicare una patch casuale :)
pomeh

@pomeh credo sempre nel rendere la logica completa. :)
smwikipedia


1
Nota, dovresti anche andare in Handler Mappings ed eliminare WebDAV da lì, altrimenti riceverai il messaggio di errore Handler "WebDAV" has a bad module "WebDAVModule" in its module list.
pipedreambomb

26

Ho avuto questo problema con WebDAV durante l'hosting di un progetto WebApi MVC4. Ho aggirato il problema aggiungendo questa riga a web.config:

<handlers>
  <remove name="WebDAV" />
  <add name="WebDAV" path="*" verb="*" modules="WebDAVModule"
      resourceType="Unspecified" requireAccess="None" />
</handlers>

Come spiegato qui: http://evolutionarydeveloper.blogspot.co.uk/2012/07/method-not-allowed-405-on-iis7-website.html


La migliore soluzione per chi ha effettivamente bisogno di WebDAV. Se qualcuno ha bisogno di WebDAV è una discussione separata.
MrBoJangles

24

Preso da qui e ha funzionato per me:

1.Vai a IIS Manager.

2.Fai clic sulla tua app.

3. Vai a "Handler Mappings".

4. Nell'elenco delle caratteristiche, fare doppio clic su "WebDAV".

5. Fare clic su "Restrizioni sulla richiesta".

6. Nella scheda "Verbi" seleziona "Tutti i verbi".

7.Premere OK.


3
Questo mi ha aiutato, ma chiarirò con la mia esperienza. 2. (Servizio Web) app. 3. fare doppio clic sull'icona Handler Mappings nel pannello centrale.
Gary

19

Ho provato la maggior parte delle risposte e sfortunatamente nessuna di esse ha funzionato in modo completo.

Ecco cosa ha funzionato per me. Ci sono 3 cose da fare sul sito per il quale vuoi PUT (seleziona il sito):

  1. Apri WebDav Authoring Rulese seleziona l' Disable WebDAVopzione presente sulla barra di destra.

  2. Seleziona Modules, trova WebDAV Modulee rimuovilo.

  3. Seleziona HandlerMapping, trova WebDAVHandlere rimuovilo.

Riavvia IIS.


Funziona! Non so se tutti e 3 i passaggi possono essere eseguiti modificando il file web.config, ma questo ha reso semplice l'utilizzo solo della Console di gestione IIS. Tieni presente che ci sono 3 voci HandlerMapping che iniziano con WebDAV *: le ho rimosse tutte e 3 e la vita è andata bene.
SlimsGhost

1
Ho provato a disinstallare WebDav e non ha funzionato. Quindi ho seguito tutti e tre i passaggi precedenti e ho PUTiniziato a lavorare.
rareyesdev

1
I passaggi 2 e 3 possono essere applicati a una directory virtuale senza influire sul resto del sito.
Tonatio

1
Molte grazie. mi hai salvato. Dopo 7 ore di frustrazione, ho provato tutte le risposte che potevo e finalmente la tua risposta mi ha colpito. :)
Zeeshan Safdar

1
Grazie, eccolo.
Ahmad Hamdy il

17

La rimozione del modulo WebDAV dovrebbe essere sufficiente. Basta cambiare il tuo Web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule" />

14

È meglio rimuovere solo la funzione WebDAV inutilizzata. Vai a Programmi e funzionalità => Attiva o disattiva le funzionalità di Windows e disabilita la pubblicazione WebDAV in

Internet Information Services => World Wide Web Services => Funzionalità HTTP comuni

inserisci qui la descrizione dell'immagine


Grazie ! Questo ha risolto completamente il mio problema!
wmehanna

4

Per qualsiasi motivo, contrassegnare WebDAVModule come "rimuovi" nel mio web.config non è stato sufficiente per risolvere il problema nel mio caso.

Ho trovato un altro approccio che ha risolto il problema. Se sei sulla stessa barca, prova questo:

  1. In IIS Manager, seleziona l'applicazione che deve supportare PUT.
  2. Nella visualizzazione delle funzionalità, trova le regole di creazione WebDAV . Fare doppio clic su di esso o selezionare Apri funzione dal menu di scelta rapida (clic con il tasto destro).
  3. Nel riquadro Azioni, trovare e fare clic su WebDAV Impostazioni ... .
  4. Nelle Impostazioni WebDAV, trova il comportamento del filtro delle richieste e, sotto quello, trova Consenti filtraggio dei verbi . Imposta Consenti filtro verbo su False .
  5. Nel riquadro Azioni fare clic su Applica .

Ciò impedisce a WebDAV di rifiutare i verbi che non supporta, consentendo così a un PUT di fluire attraverso il gestore RESTful senza essere molestato.


4

Un altro consiglio da parte mia. Ho usato PHP + IIS e le mappature degli handler per PHP non avevano il verbo PUT.

Vai a Gestione IIS-> Il tuo sito-> Mappature gestori-> PHPxx_via_FastCGI-> Restrizioni richieste-> Verbi, quindi aggiungi PUT.

Questo è tutto!


1
Questa è la risposta di cui hanno bisogno gli utenti php.
SpeedOfRound

4

Un altro modulo importante che deve essere riconfigurato prima che PUT e DELETE funzionino è il verbo delle opzioni

<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="OPTIONSVerbHandler" />
<remove name="WebDAV" />
<add name="OPTIONSVerbHandler" path="*" verb="*" modules="ProtocolSupportModule" resourceType="Unspecified" requireAccess="Script" />
</handlers>

Vedi anche questo post: https://stackoverflow.com/a/22018750/9376681



3

Stavo usando Angular 8 ed ero API .NET core. Aggiungo quanto segue nel file web.config del mio servizio. Questo risolve il mio errore.

<system.webServer>
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
  </modules>
</system.webServer>

2

Per me questo errore non andrebbe via e consentirebbe i metodi PUT, qualunque cosa io facessi .. webdav disinstallato, inserire la configurazione in web.config per rimuovere webdav da gestori e moduli e impostare PUT come verbo consentito sui filtri di richiesta su iis .. e assicurati che le mappature del gestore iis che gestiscono la richiesta abbiano configurato PUT ..

Alla fine il mio problema era dovuto a una cattiva installazione delle estensioni ASP.NET 4.5. Rimosso tutto ciò che riguarda asp.net dai ruoli e dalle funzionalità del server. riavviato. riletto i ruoli e riavviato. tutto ha funzionato con la configurazione di cui sopra.

--- Quanto riportato di seguito farà accettare PUT, ma lo invierà al gestore sbagliato. - ignora quanto segue

infine, l'aggiunta del verbo PUT come verbo consentito sulla mappatura del gestore TRACE su iis ha funzionato .. poiché avevo abilitato la traccia degli errori non riuscita e questo verbo non consentiva il verbo.

l'ultima volta ho avuto lo stesso problema sull'IIS di un altro server, era a causa di un "/" mancante alla fine dell'URL poiché utilizzava un gestore predefinito senza probabilmente utilizzare il documento predefinito e ora me ne rendo conto .. quindi controlla IIS mappature del gestore se nient'altro aiuta.


2

Ho avuto questo problema, ma il problema non era relativo a WebDAV. Nel mio caso, il client stava inviando un POST a www.myServer.com/api/chart. Questa chiamata dovrebbe essere gestita da "ExtensionlessUrlHanlder-Integrated-4.0", tuttavia, in qualche modo è stata creata una struttura di file locale nella directory del mio server "... \ Server \ api \ chart \". Ciò significava che invece veniva chiamato il gestore "StaticFile". L'eliminazione di quei file locali ha finalmente risolto il problema.


2

Ecco cosa ha funzionato per me:

Apri IIS e fai clic sul tuo sito.

1 - Double Click on the Modules 2 - Right Click on WebDavPublishing and remove. 3 - Restart running WebSite.


1

Per Windows server 2012 -> Vai a Gestione server -> Rimuovi ruoli e funzionalità -> Ruoli server -> Server Web (IIS) -> Server Web -> Funzionalità HTTP comuni -> Deseleziona Pubblicazione WebDAV e rimuovilo -> Riavvia server.


0

Se il pool di app IIS è in esecuzione in modalità classica, assicurati di avere quanto segue nel tuo file web.config

<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />

    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="IsapiModule" scriptProcessor="c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />

0

Nel mio caso avevo trasferito Web Deploy su un'altra porta, che era anche la porta IIS (non 80). All'inizio non me ne rendevo conto, ma anche se non c'erano errori in esecuzione entrambi sulla stessa porta, sembra che Web Deploy abbia probabilmente risposto per primo invece di IIS per qualche motivo, causando questo errore. Ho appena spostato il mio binding IIS su un'altra porta e tutto va bene. ;)


0

Per evitare che WebDav venga abilitato, rimuovere la seguente voce da ApplicationHost.config: <add name="WebDAVModule" />

La voce si trova nella sezione moduli.

Posizione esatta della configurazione: C:\Windows\System32\inetsrv\config\applicationHost.config


0

Ho avuto lo stesso problema, con un'API RESTful in esecuzione su aspnet core.

Non volevo disinstallare WebDAV e ho provato la maggior parte dei rimedi sopra descritti. Ho provato a impostare i verbi = "*" sia sul sito che sul server stesso, ma senza successo.

Qual è stato il trucco per me è stato il seguente:

Gestione IIS -> Siti -> MySite -> HandlerMappings -> aspNetCore -> Modifica

-> Restrizioni richieste -> Accesso -> Nessuno (era Script).

Dopo di che tutto ha funzionato, anche se ho sostituito le opzioni WebDAV originali.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.