对于PUT,HttpContext.Request.ContentLength始终为0吗? (但对POST有效)

时间:2019-05-16 16:21:50

标签: iis webdav httpmodule

我的网站接受文件上传。可以通过WebDAV(PUT)或POST上传文件。对于POST,我的HttpModule拦截请求并将POST的BODY保存到服务器上的文件中。对于PUT,WebDAV会处理文件的创建。

我的HttpModule还将每个文件上传记录在其OnEndRequest事件处理程序中。

我发现FOR PUT(WebDAV)都

 ctx.Request.Headers["Content-Length"]
 ctx.Request.ContentLength

始终等于零,尽管对于POST,这两个都包含正文内容的长度。

我需要怎么做才能通过WebDAV上传文件的长度?

1 个答案:

答案 0 :(得分:0)

在撰写本文时,我意识到对于PUT,我知道文件PUT到服务器的名称。所以我用以下代码解决了这个问题:

  if (ctx.Request.ContentLength == 0)
  {
      if (ctx.Request.HttpMethod == "PUT")
      {
          FileInfo fi = new FileInfo(ctx.Items["OutFile"].ToString());
          fileSize = fi.Length;
      }
  }
  else
  {
      fileSize = ctx.Request.ContentLength;
  }

(其中ctx.Items [“ OutFile”]是我从先前的事件处理程序中保留的文件的名称。)

现在这对我有用。而且,能够获得此信息而不必访问文件系统将是一件很不错的事情。如果您知道如何从当前正在执行的http事务的上下文中获取它,那么我将感谢您的建议。