首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于PUT,HttpContext.Request.ContentLength始终为0?(但对POST有效)

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

Stack Overflow用户
提问于 2019-05-17 00:21:50
回答 1查看 75关注 0票数 0

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

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

我发现对于PUT (WebDAV)两者都是如此

代码语言:javascript
复制
 ctx.Request.Headers["Content-Length"]
 ctx.Request.ContentLength

总是等于零,尽管对于POSTs,这两个值都包含正文内容的长度。

要通过WebDAV上传文件的长度,我需要做什么?

EN

回答 1

Stack Overflow用户

发布于 2019-05-17 00:21:50

当我写这篇文章的时候,我意识到对于PUT,我知道被放到服务器上的文件的名称。所以我用下面的代码解决了这个问题:

代码语言:javascript
复制
  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事务的上下文中获取它,我将非常感谢您的建议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56172835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档