Asp.net 访问请求对象将导致ReadEntityBody返回0(在HttpHandler类中)
我创建了一个httpHandler,它成功地实现了IHttpHandler来处理文件上传。它工作得非常好。您将文件与表单一起发送,类将接收该文件并将其保存到硬盘。它使用HttpWorkerRequest类的ReadEntityBody函数读取文件块 这就是我面临的情况。如果在尝试使用ReadEntityBody读取文件之前的任何阶段,我尝试访问请求对象(甚至是Request.InputStream.Length!),ReadEntityBody将返回0,表示它不会从文件流中读取 经过进一步的测试,我发现了背后的原因访问Asp.net 访问请求对象将导致ReadEntityBody返回0(在HttpHandler类中),asp.net,Asp.net,我创建了一个httpHandler,它成功地实现了IHttpHandler来处理文件上传。它工作得非常好。您将文件与表单一起发送,类将接收该文件并将其保存到硬盘。它使用HttpWorkerRequest类的ReadEntityBody函数读取文件块 这就是我面临的情况。如果在尝试使用ReadEntityBody读取文件之前的任何阶段,我尝试访问请求对象(甚至是Request.InputStream.Length!),ReadEntityBody将返回0,表示它不会从文件流中读取 经过进一步的测试
Context.Current.Request
对象将触发某种功能,使asp.net能够自行处理文件上载我认为这是一个错误
例如,就在这一行代码之后,asp.net将完全上载文件,因此ReadEntityBody以后将没有可读取的流
int FileSize = context.Request.InputStream.Length;
谁能告诉我怎么阻止这一切 它不会“上传”文件。该文件已上载。我的理解是,访问请求对象将导致它将请求数据读取到Request.Form
,Request.Files
,等等。
显然要尝试的是在调用分块读取方法之前设置
Request.InputStream.Position=0
。谢谢你的回复,我试过了,但你错了。正如我所描述的,它还没有被上传。上传文件是httpHandler的工作,这就是为什么他们称之为httpHandler。我在这里描述了一个例子,我远程调试了这个项目,我试图上传一个100mb的文件,在我按下提交按钮的那一刻,我的代码上的第一个断点将立即被调用。这意味着该文件尚未上传,但在我上面提到的代码行之后,将有一个无限的暂停,直到asp上传该文件,然后代码继续。我知道。。。这很奇怪但却是真的不我很困惑。。。当然不行了。InputStream
指向已预加载的数据。但主要思想是一样的。当您访问请求对象时,它执行与您完全相同的操作—从工作者请求读取。worker请求似乎只是转发的,所以已经读取的数据已经丢失,所以难怪您什么也得不到。现在真正的问题是你到底想做什么,为什么这是个问题?