11 October 2011 DELETE, HowTo, IIS, PUT, REST Robert Muehsig

Im Standardfall erlaubt der IIS keine Requests mit den HTTP Verben PUT & DELETE. Diese sind allerdings in einer REST Welt pflicht. Man kann nun im IIS rumdoktern und dort die beiden Verben aktivieren, allerdings habe ich solche Sachen als Entwickler lieber selbst in der Hand als dem Admin ein Handbuch zu schreiben ;)

Ziel ist es also, HTTP PUT & Delete über die Web.config zu aktivieren.

Web.config

Unter dem Konfigurationspunkt system.webServer können die entsprechenden Einstellungen gemacht werden:

  <system.webServer>
    ...
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule" />
	  ...
    </modules>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
      <add name="ExtensionlessUrlHandler-Integrated-4.0" 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" />
      ...
    </handlers>
  </system.webServer>

 

Erklärung:

Wir entfernen den “ExtensionlessUrlHandler” (wenn die Anwendung im Integrated Modus läuft, dann ist es der ExtensionlessUrlHanler-Integrated – später dazu noch mehr) und fügen ihn darauf neu hinzu und erlauben neben den GET, HEAD, POST Verben noch PUT und DELETE. Ohne das entfernen, wäre der Eintrag zwei mal drin und der IIS würde eine Fehlerseite generieren.

Warum das entfernen von dem WebDav Modul wichtig ist

Wenn auf dem IIS noch das WebDav Feature aktiviert ist, dann muss man es für diese Seite deaktivieren, weil sowohl WebDav als auch unser eigentlicher REST Service sprechen auf dieselben Verben an.

Zu den Handlern

In meinem Fall habe ich nur den Handler, welcher für die “extensionless” Sachen notwendig ist freigeschalten. Alle Handler einer Webanwendung können im IIS unter Handler Mappings betrachtet werden:

image

Unter den Details können auch die “Request Restrictions” betrachtet werden:

image

Bei mir hat es jedenfalls mit der web.config Einstellung geklappt ;)

Als Abschluss noch der Hinweis für alle die sich fragen “Was ist eigentlich der Unterschied zwischen einem Modul und einem Handler?” – Hier die Antwort.


Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!