在ASP.NET中从.ashx处理程序服务HTTP PUT而不调整文件权限

时间:2012-06-25 22:47:57

标签: asp.net ashx http-put

我有一个.ASHX处理程序我想用来处理HTTP PUT以允许我将文件上传到Web服务器 - .ASHX文件实际上传了数据并将文件粘贴到其他地方,因此它实际上从未触及过磁盘在这里。

我已经设置了web.config以允许它处理HTTP PUT,但IIS不会将请求传递给我的代码,除非我将.ASHX文件本身的ACL设置为可写 - 这有点傻因为我们实际上不打算写这些文件。

如果我设置ACL,它工作正常,但我希望能够处理文件而不必设置ACL(我确信有一种合适的方法可以使IIS只通过HTTP PUT到.ASHX文件而不检查文件本身的权限。

这是在Win2008 R2上(实际上,它在Azure的2008 R2上,但应该是相同的),使用.NET 4.0

401 - Unauthorized: Access is denied due to invalid credentials. You do not have permission to view this directory or page using the credentials that you supplied.

1 个答案:

答案 0 :(得分:0)

让PUT(和DELETE)与ASP.NET一起工作有几个障碍。既然你提到了Win2008 R2(IIS 7.5),我会检查你看到的错误是否提到了WebDAV模块或处理程序。

自IIS 7.5起,默认情况下启用WebDAV。它将干扰ASP.NET处理程序和模块上的HTTP PUT和DELETE谓词。如果您正在实施RESTful服务,则可能甚至不使用此功能。通过web.config禁用它。

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

此论坛帖子中提到了一些名为HTTP Error 405 With ASP.Net MVC and HTTP PUT on IIS 7.5的其他解决方案。