Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 访问请求对象将导致ReadEntityBody返回0(在HttpHandler类中)_Asp.net - Fatal编程技术网

Asp.net 访问请求对象将导致ReadEntityBody返回0(在HttpHandler类中)

Asp.net 访问请求对象将导致ReadEntityBody返回0(在HttpHandler类中),asp.net,Asp.net,我创建了一个httpHandler,它成功地实现了IHttpHandler来处理文件上传。它工作得非常好。您将文件与表单一起发送,类将接收该文件并将其保存到硬盘。它使用HttpWorkerRequest类的ReadEntityBody函数读取文件块 这就是我面临的情况。如果在尝试使用ReadEntityBody读取文件之前的任何阶段,我尝试访问请求对象(甚至是Request.InputStream.Length!),ReadEntityBody将返回0,表示它不会从文件流中读取 经过进一步的测试

我创建了一个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请求似乎只是转发的,所以已经读取的数据已经丢失,所以难怪您什么也得不到。现在真正的问题是你到底想做什么,为什么这是个问题?