web-dev-qa-db-de.com

IIS 7.5 + Aktivieren Sie PUT und DELETE für den RESTFul-Dienst, ohne Erweiterung

ich versuche zu verstehen, wie IIS 7.5 POST und die PUT-Anfrage behandelt. 

Ich schreibe einen RESTful-Dienst mit OpenRasta-Framework. Die Operation POST funktioniert problemlos, die PUT-Operation für dieselbe URL jedoch nicht. Es wird ein Fehler wie der folgende ausgegeben

Detailed Error Information
Module: IIS Web Core
Notification: MapRequestHandler
Handler: StaticFile
Error Code: 0x80070002

die URL ist wie folgt und folgt "http: //localhost/MyService/Resource.Something.manifest".

Das gleiche Setup funktioniert gut in der Entwicklung von Visual Studio IIS.

Lösung

Grundsätzlich akzeptiert der Standard-ExtensionlessUrlHandler das Verb PUT und DELETE nicht. Sie müssen sie nur hinzufügen.

<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" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
54
Eatdoku

Damit PUT und DELETE von IIS 7.5 für eine PHP 5.4 Fast-CGI-gesteuerte REST -API akzeptiert werden, musste ich das WebDAV-Modul deaktivieren. Ansonsten greift das WebDAV-Modul die HTTP-Anforderungen mit PUT oder DELETE ein. Es war jedoch ein bisschen verwirrend, diese Funktion zum Laufen zu bringen, und ich habe vielleicht einige Schritte verpasst oder in einer anderen Reihenfolge ausgeführt.

Diese Zeilen werden als untergeordnete Elemente des <system.webServer>- Elements in web.config im Anwendungsstammverzeichnis abgelegt.

<modules>
    <remove name="WebDAVModule" />
</modules>
<handlers>
    <remove name="WebDAV" />
</handlers>

Ich hoffe, dass dies einige Frustration erspart. Anscheinend ist die Standardeinstellung für den Server so, dass alle nicht aufgelisteten HTTP-Verbs akzeptiert werden - siehe Einstellungen unter Request filtering -> HTTP Verbs -> Edit feature Settings. Es kann erwogen werden, die zu erlaubenden VERBS explizit hinzuzufügen. Die erlaubten Verben können angegeben werden, indem dieses Snippet angehängt wird, auch als untergeordnetes Element von <system.webServer>.

    <security>
        <requestFiltering>
            <verbs allowUnlisted="false">
                <add verb="GET" allowed="true" />
                <add verb="POST" allowed="true" />
                <add verb="DELETE" allowed="true" />
                <add verb="PUT" allowed="true" />
            </verbs>
        </requestFiltering>
    </security>

Auf einem Client-Rechner kann das WebDAV-Modul von hier aus deinstalliert werden: 

Control Panel -> Uninstall Program -> Turn Windows features on or off -> IIS -> World Wide Web Services -> Common HTTP feautre -> WebDAV Publishing

Die letzte Maßnahme, um es zum Laufen zu bringen, war die Bearbeitung von applicationhost.config in C:\Windows\System32\inetsrv\config. In <system.webServer> -> <handlers> sehen Sie einen PHP-Eintrag, der nur verb="GET,HEAD,POST enthält - ändern Sie ihn, um die gewünschten Verben hinzuzufügen, z. B .:

<add name="PHP54_via_FastCGI" path="*.php" verb="GET,HEAD,PUT,DELETE,POST"/>
                                                                 |
                                                                 |
                                                                 |
append verbs here  ----------------------------------------------|
74
John P

1.Gehen Sie zu 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 "Anforderungseinschränkungen".
6. Wählen Sie auf der Registerkarte "Verben" die Option "Alle Verben".
7. Drücken Sie OK.

28
Jalaa Zahwa

Siehe http://learn.iis.net/page.aspx/901/iis-express-faq/ das vom Wiki OR verlinkt wird.

Über den Link (zur besseren Lesbarkeit nicht in Anführungszeichen gesetzt):

A: Sie können den Express-Code IIS applicationHost.config im Ordner %userprofile%\documents\IISExpress\config ändern. Um beispielsweise PUT und DELETE für erweiterungslose URLs zu aktivieren, scrollen Sie zum Ende der Express-Datei IIS applicationHost.config und suchen Sie nach einem Handler-Eintrag, der mit: 

<add name="ExtensionlessUrl-Integrated-4.0"

Fügen Sie im Attribut verbPUT und DELETE hinzu, sodass das Attribut verb folgendermaßen aussieht: verb="GET,HEAD,POST,DEBUG,PUT,DELETE".

11
SerialSeb

Mein Szenario war eine Webanwendung in einer Website unter IIS 7.5. Die Website musste weiterhin WebDAV aktivieren, die Webanwendung musste jedoch deaktiviert werden, um PUT und DELETE in der API REST zu unterstützen.

Damit dies funktioniert, benötigte die Web.config der Webanwendung Folgendes:

<modules runAllManagedModulesForAllRequests="true" runManagedModulesForWebDavRequests="true" >
  <remove name="WebDAVModule" />
</modules>

<handlers>
  <remove name="WebDAV" />
</handlers>

Der wichtige Unterschied zu den anderen Antworten ist die Notwendigkeit von runManagedModulesForWebDavRequests = "true". 

8
John Blenheim

Für mich macht das den Trick in der web.config.

<system.webserver>
    <handlers>
          <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" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />

          <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
<system.webserver/>

<system.web>
  <authentication mode="Windows" />
  <identity impersonate="true"/>
<system.web/>

Ich habe folgende Konfiguration verwendet:

  • IIS 7.5
  • Windows Server 2008 R2
  • Benutzerdefinierter Anwendungspool, .NET 4.0, integriert
  • Windows-Authentifizierung = true
  • Anonyme Authentifizierung = false

Ich hoffe es hilft. ;-)

7
user2084570

URLScan-Tool-Benutzer

Wenn andere Antworten immer noch nicht funktionieren und Sie einen 404-Fehler erhalten, können diese Verben vom URLScan -Tool explizit abgelehnt werden, sofern Sie es installiert haben. 

Sie können die [AllowVerbs]- und [DenyVerbs]-Abschnitte der URLScan.ini-Datei entsprechend Ihren Anforderungen konfigurieren.

Hüten Sie sich vor den Sicherheitsrisiken der Aktivierung dieser Verben.

6
Alph.Dev

Was für mich funktionierte, war die vollständige Deinstallation von WebDav. 

5
leojh

Nur in die Handlerzuordnungen zu gehen und WebDAV so einzustellen, dass alle Verben gehandhabt werden, war für mich die einzige Sache, obwohl PUT und DELETE bereits als behandelte Verben aufgeführt waren. Die funktionierende web.config ist:

  <system.webServer>
    <handlers>     
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
      <remove name="WebDAV" />
      <add name="WebDAV" path="*" verb="*" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />
    </handlers>
  </system.webServer>
4

Ich habe es in IIS 8 versucht.

  • ** Deinstallieren Sie WebDav Publishing 

    Deinstallationsschritte -> Systemsteuerung -> Gehe zu Programme und Funktionen -> Fenster Features ein- oder ausschalten-> Wählen Sie Internetinformationsdienste-> Weltweit Webdienste-> Allgemeine HTTP-Funktionen -> aus "Entfernen" der WebDAV-Veröffentlichung durch Deaktivieren der WebDAV-Option **

3
bgS

in der web.config 

<system.webServer>
    <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

sie können auch die Verwaltungsbenutzeroberfläche IIS verwenden und diese global oder den Standard-Webserver definieren

3
Sergio

Grund für 500 Fehler!

Hallo zusammen, 

Ich möchte auch meine eigene Forschung posten, ich hoffe, dass dies zukünftigen Enthusiasten helfen würde. Wie in den Antworten vorgeschlagen, kann ich WebDav nicht deinstallieren. Daher habe ich die folgende Zeile in der Web-Konfiguration hinzugefügt (aus anderen Antworten).

 <system.webServer>
    <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

ich habe jedoch eine 500-Fehlermeldung erhalten, wenn ich den Debug-Modus aktiviert habe

 Cannot add duplicate collection entry of type 'add' with unique key attribute 'name' set to 'ExtensionlessUrlHandler-Integrated-4.0'

Antworten

Da es bereits einen ExtensionlessUrlHandler im Abschnitt mit den Handlerzuordnungen gab, gehen Sie folgendermaßen vor, um das Problem zu beheben.

Methode 1

1) Gehen Sie zu Ihrem IIS Manager und wählen Sie Ihre App aus

2) Gehen Sie zur Funktion "Handler-Zuordnungen"

3) Suchen Sie nach ExtensionlessUrlHandler-Integrated-4.0 und löschen Sie es.

4) Fügen Sie ExtensionlessUrlHandler in Ihrem Webconfig hinzu (wie in den obigen Antworten erwähnt).

<system.webServer>
<handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

Methode 2

1) Entfernen Sie den ExtensionlessUrl-Handler aus Ihrer Webkonfiguration

2) Klicken Sie in IIS Server auf Ihre App, und wechseln Sie zu HandlerMappings

3) Finden Sie ExtensionlessUrlHandler-Integrated-4.0 (nur dieser Name, andere ignorieren)

4) Klicken Sie mit der rechten Maustaste darauf und wählen Sie Bearbeiten

edit handler

5) Klicken Sie auf "Anforderungsbeschränkungen", wählen Sie die Registerkarte "Verben" und wählen Sie "Alle Verben"

dies ermöglicht es dem extensionsless-Handler, alle Verben zuzulassen.

Ich gehe zu Methode 1, da wir in web.config die Kontrolle haben können. Stellen Sie jedoch sicher, dass Sie den Deployment Server auf doppelte Handlerdefinitionen überprüfen.

2
Ganesh Vellanki

In Windows-Server 2012 . Öffnen Sie die Datei applicationHost.config in Notepad mit Administratorrechten

applicationHost.config Die Datei befindet sich unter C:\Windows\System32\inetsrv\config

Suchen Sie den Abschnitt

 <verbs allowUnlisted="false" applyToWebDAV="true">
   <add verb="GET" allowed="true" />
   <add verb="HEAD" allowed="true" />
   <add verb="POST" allowed="true" />
   <add verb="DELETE" allowed="false" />
   <add verb="TRACE" allowed="false" />
   <add verb="PUT" allowed="false" />
   <add verb="OPTIONS" allowed="false" />
</verbs>

Hinweis DELETE- und PUT-HTTP-Verben werden auf false gesetzt. Ändern Sie sie in wahr.

Es sollte jetzt wie folgt lauten

 <verbs allowUnlisted="false" applyToWebDAV="true">
   <add verb="GET" allowed="true" />
   <add verb="HEAD" allowed="true" />
   <add verb="POST" allowed="true" />
   <add verb="DELETE" allowed="true" />
   <add verb="TRACE" allowed="false" />
   <add verb="PUT" allowed="true" />
   <add verb="OPTIONS" allowed="false" />
</verbs>

Speicher die Datei. Sie haben HttpPut- und HttpDelete-Anforderungen auf Ihrem Webserver aktiviert

1
rhalf

Meine web.config mit asp.net core 1.0

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <modules>
      <remove name="WebDAVModule" />
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
  </system.webServer>
</configuration>
1
Heli Perez