2016-07-26 26 views
1

Ich arbeite an einer REST-API, und Test-und Prototyp-Arbeit an Windows 10 mit seiner nativen IIS-Installation. Die API ist in C# geschrieben. Ich habe eine Klasse erstellt, die von IHttpHandler abgeleitet ist, und davon abgeleitet, um Klassen für die Substantive meiner API zu implementieren. (Dadurch kann ich Protokollierung, Konfiguration, Überwachung usw. in meiner Basis-Substantiv-Klasse normalisieren). Um Verben zu implementieren, überschreiben die abgeleiteten Klassen die Funktionen der Basisklasse für GET, POST usw.IIS 10 gibt 401.3 Zugriff verweigert für PUT, DELETE oder PATCH für bestimmten Pfad

Wie auch immer, eines der Substantive, die ich habe, ist für den Zugriff auf das Protokoll der Anwendung. Der Pfad dafür ist/log. Darin habe ich GET implementiert, um das Protokoll zu lesen, und DELETE, um das Protokoll zu löschen. GET funktioniert gut, aber DELETE gibt mir eine 401.3 von IIS. Ich bekomme auch die gleiche 401.3, wenn ich PUT oder PATCH versuche. PUT und PATCH sind in der Logging-Klasse nicht implementiert, daher sollten sie eine nicht implementierte Nachricht zurückgeben. Ich bekomme die nicht implementierte Nachricht, wenn ich POST versuche (was nicht genau so implementiert ist, wie PUT und PATCH nicht implementiert sind).

Als ich versuchte, dieses Verhalten einzugrenzen, überprüfte ich, ob bestimmte Verben durch Anfragefilterung blockiert waren (es gab keine). Ich überprüfte, ob Process Monitor Dateisystem-Zugriffsverweigerungen auf dem zugrundeliegenden Pfad abfing (es war nicht ... Dinge sind nie so weit gekommen.) Ich versuchte dann eine andere Handler-Zuordnung hinzuzufügen - genau die gleiche wie die erste, aber mit einem anderen Pfad Name:

<Handler>

<add name="BLOBRepoLog" path="log" verb="*" type="BLOBRepoService.Log" resourceType="Unspecified" preCondition="integratedMode" > 

<add name="BLOBRepoLogSanityCheck" path="foo" verb="*" type="BLOBRepoService.Log" resourceType="Unspecified" preCondition="integratedMode" > 

</Handler >

Mit Postman, wenn ich DELETE auf Anruf/log, erhalte ich die 401,3. Wenn ich DELETE on/foo aufruft, funktioniert es korrekt. Wenn ich PUT on/log anrufe, bekomme ich den 401.3. Wenn ich PUT on/foo anrufe, bekomme ich die richtige nicht implementierte Nachricht.

Jeder hat eine Idee, warum IIS sollte zusätzliche Überprüfung auf Verben für die/log-Pfad aufgerufen werden?

Danke, Paul

Antwort

0

ich ein ähnliches Problem hatte, wo nicht in Betrieb waren Setzen und Löschen, stellte sich für mich heraus, dass Webdav das Problem war. In meinem Fall brauchte ich es nicht wirklich, also habe ich es deinstalliert und alles hat funktioniert.