"405-Methode nicht erlaubt" in IIS7.5 für die "PUT" -Methode

113

Ich verwende WebClienttype, um * .cab-Dateien auf meinen Server hochzuladen. Auf der Serverseite habe ich einen HTTP-Handler für die * .cab-Datei mit der folgenden PUT-Methode registriert:

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

Aber ich bekomme immer den Fehler "405 Methode nicht erlaubt". In der Antwort heißt es, dass die zulässigen Methoden wie folgt sind:

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}

Selbst wenn ich die PUT-Methode in der IIS-Anforderungsfilterung für meine Webanwendung explizit zulasse, tritt der gleiche Fehler immer noch auf.

Ich vermute, dass dies ein IIS-Problem ist. Ich hoffe, jemand könnte mir etwas Licht ins Dunkel bringen.

smwikipedia
quelle

Antworten:

213

Häufig wird dieser Fehler durch das WebDAV-Modul verursacht, das versucht, diese Art von Anforderungen zu verarbeiten. Eine einfache Lösung besteht darin, es aus Modulen und system.webServerHandlern des Abschnitts direkt in Ihrer web.config-Datei zu entfernen . Hier ein Konfigurationsbeispiel:

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
    <handlers>
        <remove name="WebDAV" />
    </handlers>
</system.webServer>
Davide Icardi
quelle
2
Mit dem folgenden MS-Artikel habe ich den Handlern das Tag "remove" hinzugefügt, aber es hat immer noch nicht funktioniert. Dank Ihrer Antwort musste ich sie auch zum Modulbereich hinzufügen. Sehr geschätzt. Hier ist der Artikel: asp.net/web-api/overview/testing-and-debugging/…
Tod Birdsall
Großartig, Sie haben mir Stunden schmerzhaften Debuggens erspart! :)
Kaspars Ozols
Einfache und einfache Lösung, danke!
MorenajeRD
Ich habe das versucht, funktioniert aber bei mir nicht. Ich erhalte immer noch den Fehler 405 - Methode nicht erlaubt. Beachten Sie, dass ich IIS Express verwende und der Fehler irgendwie nur beim PUT auftritt, aber für GET, POST AND DELETE funktioniert.
Thierry
46

Ich habe die Ablaufverfolgung fehlgeschlagener Anforderungen aktiviert und die folgenden Informationen erhalten:

 <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>

Also habe ich das WebDAVModule von meinem IIS deinstalliert, jetzt ist alles in Ordnung ~

Die IIS-Ablaufverfolgungsfunktion ist sehr hilfreich.

smwikipedia
quelle
1
Danke für deine Antwort ! Nach zwei Tagen Recherche bestand die einzige funktionierende Lösung, die ich fand, um "405-Methode nicht zulässig" zu vermeiden, darin, die CORS-Header in der Application_BeginRequestMethode zu definieren , wie in dieser Antwort auf stackoverflow.com/a/14631068/827168 erwähnt . Aber Ihre Antwort ist besser als alle anderen, weil es hilft, das Problem zu erkennen, anstatt einen zufälligen Patch anzuwenden :)
pomeh
@pomeh Ich glaube immer daran, die Logik zu vervollständigen. :)
smwikipedia
1
@ Demodave Überprüfen Sie hier: technet.microsoft.com/en-us/library/cc731223%28v=ws.10%29.aspx
smwikipedia
1
Beachten Sie, dass Sie auch in die Handler-Zuordnungen gehen und WebDAV von dort löschen sollten, da sonst die Fehlermeldung angezeigt wird Handler "WebDAV" has a bad module "WebDAVModule" in its module list.
Pipedreambomb
26

Ich hatte dieses Problem mit WebDAV beim Hosten eines MVC4-WebApi-Projekts. Ich habe es umgangen, indem ich diese Zeile zur web.config hinzugefügt habe:

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

Wie hier erklärt: http://evolutionarydeveloper.blogspot.co.uk/2012/07/method-not-allowed-405-on-iis7-website.html

Nick
quelle
Beste Lösung für jemanden, der WebDAV tatsächlich benötigt. Ob jemand WebDAV benötigt, ist eine separate Diskussion.
MrBoJangles
24

Von hier genommen und es hat bei mir funktioniert:

1.Gehen Sie zum IIS-Manager.

2.Klicken Sie auf Ihre App.

3.Gehen Sie zu "Handler-Zuordnungen".

4. Doppelklicken Sie in der Funktionsliste auf "WebDAV".

5.Klicken Sie auf "Einschränkungen anfordern".

6.Wählen Sie auf der Registerkarte "Verben" "Alle Verben".

7.Drücken Sie OK.

goran85
quelle
3
Das hat mir geholfen, aber ich werde es mit meiner Erfahrung klären. 2. (Web Service) App. 3. Doppelklicken Sie im mittleren Bereich auf das Symbol Handler-Zuordnungen.
Gary
19

Ich habe die meisten Antworten ausprobiert und leider hat keine davon vollständig funktioniert.

Hier ist, was für mich funktioniert hat. Es gibt drei Dinge, die Sie mit der Site tun können, für die Sie PUT möchten (wählen Sie die Site aus):

  1. Öffnen WebDav Authoring RulesSie die Disable WebDAVOption in der rechten Leiste und wählen Sie sie aus .

  2. Wählen Sie das aus Modules, suchen Sie es WebDAV Moduleund entfernen Sie es.

  3. Wählen Sie das aus HandlerMapping, suchen Sie es WebDAVHandlerund entfernen Sie es.

Starten Sie IIS neu.

coding_idiot
quelle
Das funktioniert! Ich weiß nicht, ob alle drei Schritte durch Bearbeiten der Datei web.config ausgeführt werden können. Dies machte es jedoch einfach, nur die IIS-Verwaltungskonsole zu verwenden. Beachten Sie nur, dass es 3 HandlerMapping-Einträge gibt, die mit WebDAV * beginnen. Ich habe alle 3 entfernt und das Leben war gut.
SlimsGhost
1
Ich habe versucht, WebDav zu deinstallieren und habe nicht funktioniert. Dann folgte ich allen drei Schritten oben und PUTfing an zu arbeiten.
Rareyesdev
1
Die Schritte 2 und 3 können auf ein virtuelles Verzeichnis angewendet werden, ohne den Rest der Site zu beeinflussen.
Tonatio
1
Vielen Dank. Du hast mich gerettet. Nach 7 Stunden Frust versuchte ich alle Antworten, die ich konnte und schließlich traf mich deine Antwort. :)
Zeeshan Safdar
1
Danke, das ist es.
Ahmad Hamdy
17

Das Entfernen des WebDAV-Moduls sollte ausreichen. Ändern Sie einfach Ihre Web.config:

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

Entfernen Sie am besten einfach die nicht verwendete WebDAV-Funktion. Gehen Sie zu Programme und Funktionen => Windows-Funktionen aktivieren oder deaktivieren und deaktivieren Sie WebDAV Publishing unter

Internetinformationsdienste => World Wide Web Services => Allgemeine HTTP-Funktionen

Geben Sie hier die Bildbeschreibung ein

SliverNinja - MSFT
quelle
Vielen Dank ! Das hat mein Problem total behoben!
Wmehanna
4

Aus irgendeinem Grund reichte es in meinem Fall nicht aus, WebDAVModule in meiner web.config als "entfernen" zu markieren, um das Problem in meinem Fall zu beheben.

Ich habe einen anderen Ansatz gefunden haben , das Problem zu lösen. Wenn Sie im selben Boot sitzen, versuchen Sie Folgendes:

  1. Wählen Sie im IIS-Manager die Anwendung aus, die PUT unterstützen soll.
  2. Suchen Sie in der Funktionsansicht nach WebDAV-Authoring-Regeln . Doppelklicken Sie darauf oder wählen Sie Feature öffnen aus dem Kontextmenü (Rechtsklick).
  3. Suchen und klicken Sie im Bereich Aktionen auf WebDAV-Einstellungen ... .
  4. Suchen Sie in den WebDAV-Einstellungen nach Anforderungsfilterverhalten und darunter nach Verbfilter zulassen . Setzen Sie Verbfilterung zulassen auf Falsch .
  5. Klicken Sie im Bereich Aktionen auf Übernehmen .

Dies verhindert, dass WebDAV nicht unterstützte Verben ablehnt, sodass ein PUT ungestört zu Ihrem RESTful-Handler durchfließen kann.

Dan K.
quelle
4

Noch ein Tipp von mir. Ich habe PHP + IIS verwendet und die Handler-Zuordnungen für PHP hatten nicht das PUT-Verb.

Gehen Sie zu IIS Manager-> Ihre Site-> Handler-Zuordnungen-> PHPxx_via_FastCGI-> Anforderungsbeschränkungen-> Verben und fügen Sie dann PUT hinzu.

Das ist es!

Stefan Pintilie
quelle
1
Dies ist die Antwort, die PHP-Benutzer benötigen.
SpeedOfRound
4

Ein weiteres wichtiges Modul, das neu konfiguriert werden muss, bevor PUT und DELETE funktionieren, ist das Optionsverb

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

Siehe auch diesen Beitrag: https://stackoverflow.com/a/22018750/9376681

Michael Radhuber
quelle
2

Für mich würde dieser Fehler nicht verschwinden und PUT-Methoden zulassen, was auch immer ich getan habe. Webdav deinstallieren, Konfiguration in web.config einfügen, um Webdav aus Handlern und Modulen zu entfernen, und PUT als zulässiges Verb für die Anforderungsfilter auf iis einrichten .. und stellen Sie sicher, dass für die Handlerzuordnungen, die die Anforderung verarbeiten, PUT konfiguriert wurde ..

Mein Problem war schließlich auf eine schlechte Installation von ASP.NET 4.5-Erweiterungen zurückzuführen. Alles, was mit asp.net zu tun hat, wurde aus den Serverrollen und -funktionen entfernt. neu gestartet. las die Rollen und startete neu. Alles hat mit der obigen Konfiguration funktioniert.

--- Das Folgende bewirkt, dass PUT akzeptiert wird, sendet es jedoch an den falschen Handler. - unten beachten

Schließlich funktionierte das Hinzufügen des PUT-Verbs als zulässiges Verb in der TRACE-Handler-Zuordnung auf iis. Da ich die fehlgeschlagene Fehlerverfolgung aktiviert hatte und dieses Verb das Verb nicht zuließ.

Das letzte Mal, als ich das gleiche Problem auf dem IIS eines anderen Servers hatte, lag es an einem fehlenden '/' am Ende der URL, da es wahrscheinlich einen Standardhandler ohne Verwendung des Standarddokuments verwendete, und jetzt merke ich, dass ... also IIS überprüfen Handler-Zuordnungen, wenn nichts anderes hilft.

Harish
quelle
2

Ich hatte dieses Problem, aber nichts im Zusammenhang mit WebDAV war das Problem. In meinem Fall hat der Client einen POST an www.myServer.com/api/chart gesendet. Dieser Aufruf sollte von "ExtensionlessUrlHanlder-Integrated-4.0" verarbeitet werden. In meinem Serververzeichnis "... \ Server \ api \ chart \" wurde jedoch irgendwie eine lokale Dateistruktur erstellt. Dies bedeutete, dass stattdessen der Handler "StaticFile" aufgerufen wurde. Das Löschen dieser lokalen Dateien löste schließlich das Problem.

Atilio Jobson
quelle
2

Folgendes hat bei mir funktioniert:

Öffnen Sie IIS und klicken Sie auf Ihre Site.

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

nPcomp
quelle
2

Ich habe Angular 8 verwendet und war eine .NET-Kern-API. Ich füge Folgendes in meine Dienstdatei web.config ein. Das behebt meinen Fehler.

<system.webServer>
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
  </modules>
</system.webServer>
Atik Sarker
quelle
1

Für Windows Server 2012 -> Gehen Sie zu Server-Manager -> Rollen und Funktionen entfernen -> Serverrollen -> Webserver (IIS) -> Webserver -> Allgemeine HTTP-Funktionen -> Deaktivieren Sie WebDAV-Veröffentlichung und entfernen Sie ihn -> Server neu starten.

Savan Gadhiya
quelle
0

Wenn der IIS-App-Pool im klassischen Modus ausgeführt wird, stellen Sie sicher, dass in Ihrer web.config Folgendes vorhanden ist

<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" />
Arjun Mukherji
quelle
0

In meinem Fall hatte ich Web Deploy an einen anderen Port verlegt, der auch der IIS-Port war (nicht 80). Anfangs war mir nicht klar, aber obwohl beide Fehler nicht unter demselben Port ausgeführt wurden, reagierte Web Deploy aus irgendeinem Grund höchstwahrscheinlich zuerst anstelle von IIS und verursachte diesen Fehler. Ich habe gerade meine IIS-Bindung an einen anderen Port verschoben und alles ist in Ordnung. ;)

James Wilkins
quelle
0

Entfernen Sie den folgenden Eintrag aus der ApplicationHost.config, um zu verhindern, dass WebDav überhaupt aktiviert wird: <add name="WebDAVModule" />

Der Eintrag befindet sich im Modulbereich.

Genaue Position der Konfiguration: C:\Windows\System32\inetsrv\config\applicationHost.config

Yush0
quelle
0

Ich hatte das gleiche Problem mit einer RESTful-API, die auf dem Aspnet-Kern ausgeführt wird.

Ich wollte WebDAV nicht deinstallieren und habe die meisten der oben beschriebenen Mittel ausprobiert. Ich habe versucht, die Verben = "*" sowohl auf der Site als auch auf dem Server selbst zu setzen, aber ohne Erfolg.

Was der Trick für mich war, war der folgende:

IIS-Manager -> Sites -> MySite -> HandlerMappings -> aspNetCore -> Bearbeiten

-> Anforderungsbeschränkungen -> Zugriff -> Keine (es war Skript).

Danach hat alles funktioniert, auch wenn ich die ursprünglichen WebDAV-Optionen ersetzt habe.

Dardan Vokshi
quelle