it-swarm.com.de

"405-Methode nicht zulässig" in IIS 7.5 für die "PUT" -Methode

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

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

Ich bekomme jedoch immer den Fehler "405 Methode nicht erlaubt". Die Antwort lautete, 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 ausdrücklich zulasse, tritt derselbe Fehler immer noch auf.

Ich vermute, dies ist ein IIS Problem. Ich hoffe, dass jemand für mich etwas Licht ins Dunkel bringen kann.

94
smwikipedia

Ich habe die Ablaufverfolgung für fehlgeschlagene Anforderungen aktiviert und folgende 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 Verfolgungsfunktion von IIS ist sehr hilfreich.

39
smwikipedia

Dieser Fehler wird häufig durch das WebDAV-Modul verursacht, das versucht, diese Art von Anforderungen zu verarbeiten. Eine einfache Lösung besteht darin, sie aus den Modulen und den Handlern des system.webServer-Abschnitts in Ihrer Datei web.config zu entfernen. Hier ein Konfigurationsbeispiel:

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

Ich hatte dieses Problem mit WebDAV beim Hosten eines MVC4-WebApi-Projekts. Ich bin darum herumgekommen, indem ich diese Zeile in die web.config eingefü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

20
Nick

Genommen von hier und es hat für mich funktioniert:

1.Gehen Sie zu IIS Manager.

2.Klicken Sie auf Ihre App.

3. Gehen Sie zu "Handler-Mappings".

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

5.Klicken Sie auf "Anforderungsbeschränkungen".

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

7.Drücken Sie auf OK.

18
goran85

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

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

Ich habe die meisten Antworten ausprobiert und leider funktionierte keine.

Hier ist was für mich gearbeitet hat. Für die Site, für die Sie PUT verwenden möchten, gibt es drei Dinge (wählen Sie die Site aus):

  1. Öffnen Sie WebDav Authoring Rules und wählen Sie dann die Option Disable WebDAV in der rechten Leiste aus.

  2. Wählen Sie Modules, suchen Sie den WebDAV Module und entfernen Sie ihn.

  3. Wählen Sie HandlerMapping aus, suchen Sie die WebDAVHandler und entfernen Sie sie.

Starten Sie IIS neu.

15
coding_idiot

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

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

 enter image description here

6

Aus irgendeinem Grund reichte es 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, der das Problem gelöst hat . 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-Erstellungsregeln. Doppelklicken Sie darauf oder wählen Sie Open Feature aus dem Kontextmenü (Rechtsklick).
  3. Suchen Sie im Bereich Aktionen nach WebDAV-Einstellungen ... und klicken Sie darauf.
  4. Suchen Sie in den WebDAV-Einstellungen nach Anforderungsfilterungsverhalten und danach nach Verbfilterung zulassen. Setzen Sie Verbfilterung zulassen auf Falsch.
  5. Klicken Sie im Bereich Aktionen auf Übernehmen.

Dadurch wird verhindert, dass WebDAV nicht unterstützte Verben ablehnt, sodass ein PUT ungestört an Ihren RESTful-Handler weitergeleitet werden kann.

4
Dan K

Ich hatte die gleichen Probleme mit PUT, PATCH und DELETE, hatte jedoch nichts mit WebDav installiert. Lösung 1 in diesem Artikel hat mir schließlich geholfen: http://support.Microsoft.com/kb/942051

3
gust1n

Für mich würde dieser Fehler nicht weggehen und PUT-Methoden zulassen, was auch immer ich getan habe. Deinstallierte webdav, setze die Konfiguration in web.config, um webdav von Handlern und Modulen zu entfernen, und PUT als zulässiges Verb für die Anforderungsfilter auf iis einrichten .. und stellen Sie sicher, dass iis-Handler-Mappings, die die Anforderung handhaben, PUT konfiguriert haben. 

Mein Problem war schließlich auf eine fehlerhafte Installation der ASP.NET 4.5-Erweiterungen zurückzuführen. Alles, was mit asp.net in Verbindung steht, wurde von den Serverfunktionen und -funktionen entfernt. neu gestartet. die Rollen gelesen und neu gestartet. alles funktionierte mit der obigen config.

--- Die unten stehende Option bewirkt, dass PUT akzeptiert wird, jedoch an den falschen Handler gesendet wird. - kennzeichnen Sie das unten

schließlich wurde das Hinzufügen des PUT-Verbs als erlaubtes Verb auf dem TRACE-Handler-Mapping auf iis funktioniert .. da ich die Fehlerverfolgung von Fehlern aktiviert hatte und dieses Verb das Verb nicht erlaubte.

letztes Mal hatte ich das gleiche Problem mit dem IIS eines anderen Servers. Es war auf ein fehlendes "/" am Ende der URL zurückzuführen, da er einen Standardhandler ohne das Standarddokument verwendet hatte, und jetzt merke ich, dass .. also check IIS Handlerzuordnungen, wenn nichts anderes hilft.

2
Harish

Ich hatte dieses Problem, aber nichts in Bezug auf WebDAV war das Problem. In meinem Fall hat der Client POST an www.myServer.com/api/chart gesendet. Dieser Aufruf sollte von "ExtensionlessUrlHanlder-Integrated-4.0" ausgeführt werden, jedoch wurde irgendwie eine lokale Dateistruktur in meinem Serververzeichnis "...\Server\api\chart \" erstellt. Dies bedeutet, dass stattdessen der Handler "StaticFile" aufgerufen wurde. Durch das Löschen dieser lokalen Dateien wurde das Problem endgültig gelöst.

2
Atilio Jobson

Ein anderes wichtiges Modul, das erst neu konfiguriert werden muss, bevor PUT und DELETE funktionieren, ist das Verb für Optionen 

<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

1

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

1
Savan Gadhiya

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

Gehen Sie zu IIS Manager-> Ihre Site-> Handlerzuordnungen-> PHPxx_via_FastCGI-> Request Restrictions-> Verbs und fügen Sie PUT hinzu.

Das ist es!

1
Stefan Pintilie

Wenn IIS App-Pool im klassischen Modus ausgeführt wird, stellen Sie sicher, dass Folgendes in Ihrer web.config enthalten 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" />
0
Arjun Mukherji

In meinem Fall hatte ich Web Deploy an einen anderen Port verlagert, der auch der Port IIS Port (nicht 80) war. Ich wusste es zuerst nicht, aber obwohl beide Fehler unter demselben Port ausgeführt wurden, schien Web Deploy höchstwahrscheinlich zuerst zu antworten, statt IIS aus irgendeinem Grund und verursachte diesen Fehler. Ich habe gerade meine IIS Bindung an einen anderen Port verschoben und alles ist gut. ;)

0
James Wilkins

Folgendes hat für mich funktioniert:

Öffnen Sie sich IIS und klicken Sie auf Ihre Site.

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

0
nPcomp

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

Der Eintrag befindet sich im Modulbereich.

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

0
Yush0