IIS 7中的文件代理处理程序

时间:2010-12-23 18:15:21

标签: asp.net iis-7 content-type chunked-encoding

我有一个文件代理IHttpHandler来确保身份验证和记录请求。它在开发服务器和IIS 6上运行正常。在IIS 7中,我有两个问题:

  1. Microsoft Office(Word,Excel ...)使用OPTIONPROPFIND谓词发送WebDAV请求。 ASP.NET抛出异常,因为它不支持它们。有没有办法在IIS级别禁用这些动词,以便它永远不会到达ASP.NET?我猜它会返回405 Method Not Allowed错误(http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error)。

  2. IIS 7打开分块编码。在这种情况下,Content-Length标头无效,显然IIS 7将其删除:http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.4.4。但是,它还会删除Content-Type标头,导致文件在浏览器中显示为文本。那么如何阻止IIS 7删除Content-Type,或者如何为这一页关闭分块编码?以下是您要比较的响应标题。

  3. 开发服务器响应:

    HTTP/1.1 200 OK
    Server: ASP.NET Development Server/9.0.0.0
    Date: Thu, 23 Dec 2010 17:57:09 GMT
    X-AspNet-Version: 2.0.50727
    Content-Length: 68096
    Content-Disposition: inline; filename=test.doc
    Cache-Control: private
    Last-Modified: Thu, 23 Dec 2010 09:14:18 GMT
    Content-Type: application/msword
    Connection: Close
    

    IIS 7响应:

    HTTP/1.1 200 OK
    Cache-Control: private
    Transfer-Encoding: chunked
    Last-Modified: Thu, 23 Dec 2010 09:30:31 GMT
    Server: Microsoft-IIS/7.5
    Content-Disposition: inline; filename=test.doc
    X-AspNet-Version: 2.0.50727
    X-Powered-By: ASP.NET
    Date: Thu, 23 Dec 2010 17:57:59 GMT
    

1 个答案:

答案 0 :(得分:0)

关于分块编码的问题不准确。我在开发机器上做了一个小改动:我添加了Content-Length。在开发机器上它并没有什么不同 - 它始终有效。在IIS 7中,添加Content-Length实际上禁用了分块编码,一切都按预期工作。

对于WebDAV请求,IIS 7不会将它们发送到ASP.NET,所以我们没问题。但是,开发服务器确实如此。我看到了添加DefaultHttpHandler来处理它们的建议,但是在开发服务器上意味着提供了原始的aspx页面。