2016-07-26 73 views
1

我正在使用REST API,并且使用其本机IIS安装在Windows 10上进行测试和原型工作。 API是用C#编写的。我创建了一个派生自IHttpHandler的类,并从中派生出来实现API的名词的类。 (这使我能够在我的基础名词类中共同记录,配置,审计等)。为了实现动词,派生类覆盖GET,POST等基类的函数。IIS 10给予401.3访问拒绝PUT,DELETE或PATCH的特定路径

无论如何,我拥有的名词之一是用于访问应用程序的日志。这个路径是/ log。其中我已经实现了GET,读取日志和DELETE,以清除日志。 GET工作正常,但是,DELETE给了我一个来自IIS的401.3。如果我尝试PUT或PATCH,我也会得到相同的401.3。 PUT和PATCH没有在Logging类中实现,所以它们应该返回一个未实现的消息。如果我尝试POST(没有以与PUT和PATCH未实现完全相同的方式实现),我会得到未实现的消息。

作为试图缩小这种行为的一部分,我检查了是否有特定的动词被请求过滤阻塞(没有)。我检查了Process Monitor是否在基础路径上捕获文件系统访问拒绝(它不是......事情从来没有那么远)。然后,我尝试添加另一个处理程序映射 - 与第一个完全相同,但是具有不同的路径名称:

<处理>

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

< /处理器>

使用邮差,如果我叫删除/日志中,我得到了401.3。如果我在/ foo上调用DELETE,它可以正常工作。如果我在/ log上调用PUT,我会得到401.3。如果我在/ foo上调用PUT,我会得到正确的未实现的消息。

任何人都有一个想法,为什么IIS应该对调用/ log路径的动词做额外的审查?

感谢, 保罗

回答

0

我也有类似的问题,即PUT和DELETE不工作,它变成了对我来说是webdav的问题。在我的情况下,我并不真的需要它,所以我卸载它,一切正常。