做一个HttpModule ,用GetPreloadedEntityBody()取数据总是报引用空的异常.(同样代码在2003中可以).在BAIDU和GOOGLE上也搜到类似问题,但是没有看到答案...求教了!!

解决方案 »

  1.   

    那就是为什么HttpWorkerRequest有一个叫着HasEntitybody的方法了,
    自定义的HttpModules必须用HasEntitybody方法来检查web 服务器是否已经预加载了客户端的请求数据。
    如果没有就必须使用ReadEntityBody来获取客户端的请求数据
      

  2.   

    //以前的帖子回复IServiceProvider provider = (IServiceProvider) HttpContext.Current; 
    HttpWorkerRequest wr = (HttpWorkerRequest) provider.GetService(typeof(HttpWorkerRequest)); 
    string addr = wr.GetLocalAddress(); 
    Response.Write(String.Format("NiC Address:{0}<BR>", addr)); 
    byte[] bs = wr.GetPreloadedEntityBody(); 
    String s = ""; 
    if (bs != null && bs.Length >0) 
    s= System.Text.Encoding.Default.GetString(bs); 
    Response.Write(s + "<BR>"); 
    if (!wr.IsEntireEntityBodyIsPreloaded()) 

    Response.Write("normally shouldn't be here"); 
    int n = 1024; 
    byte[] bs2 = new byte[n]; 
    while (wr.ReadEntityBody(bs2,n) >0) 

    s = System.Text.Encoding.Default.GetString(bs2); 
    Response.Write(s + "<BR>"); 

    } note, as IIS receives data on its TCP/IP connection from the browser, it sends a copy to the ASP.NET worker process through a named pipe. You use ReadEntityBody to read the data from this pipe. But you might not need to use ReadEntityBody if the data is not huge
      

  3.   

    补充一下:虽然问题已解决,但我希望遇到我类似问题的人可以搜索到这个贴子.这是由于WEB服务器不同引起的.具体了解一下:ISAPIWorkerRequest 及SimpleWorkerREquest
    如还不明白可与我联系:[email protected]
      

  4.   

    还是不行啊?我的是已给做过HasEntitybody的验证了,当这个为true时我才向下执行的,还是得到
    了NULL,依然没有解决问题!
      

  5.   

    ISAPIWorkerRequest及SimpleWorkerREquest 的区别,不是太明白啊,能解释下么?