2011-09-05 69 views
1

我正在向POST简单服务器示例发送POST数据。在头文件中,我还有一些其他细节,这些细节作为输入流打包到POST数据发送中。如何使用HandlePostRequest检索它们?我的源代码附在这里:.NET handlepostrequest - 检索数据

public void handlePOSTRequest() { 

     Console.WriteLine("get post data start"); 
     int content_len = 0; 
     MemoryStream ms = new MemoryStream(); 
     if (this.httpHeaders.ContainsKey("content-length")) { 
      content_len = Convert.ToInt32(this.httpHeaders["content-length"]); 
      if (content_len > MAX_POST_SIZE) { 
       throw new Exception(
        String.Format("POST Content-Length({0}) too big for this simple server", 
         content_len)); 
      } 
      byte[] buf = new byte[BUF_SIZE]; 

      int to_read = content_len; 
      while (to_read > 0) { 
       Console.WriteLine("starting Read, to_read={0}",to_read); 
       int numread = this.inputStream.Read(buf, 0, Math.Min(BUF_SIZE, to_read)); 

       Console.WriteLine("read finished, numread={0}", numread); 
       if (numread == 0) { 
        if (to_read == 0) { 
         break; 
        } else { 
         throw new Exception("client disconnected during post"); 
        } 
       } 
       to_read -= numread; 
       ms.Write(buf, 0, numread); 
      } 
      ms.Seek(0, SeekOrigin.Begin); 
     } 
     else 
     { 
      Console.WriteLine("Missing content length"); 
     } 
     Console.WriteLine("get post data end"); 
     srv.handlePOSTRequest(this, new StreamReader(ms)); 

    } 

我得到的一切都是content_length,但我需要从流中获取数据。该流由inputStream = new BufferedStream(socket.GetStream())收集;而在这个流中,我有一个值“注册”=“123456789”,如何检索它?

谢谢

回答

1

你在这里。

string data; 
using (var streamReader = new StreamReader(Request.InputStream)) 
{ 
    data = streamReader.ReadToEnd(); 
} 

虽然如果你只需要的是registration

var registration = Request["registration"]; 

一切都基本上上Request实例,它可以从一个PageWebControl,或HttpContext.Current.Request访问。在HttpHandler的情况下,将为您传入HttpContext实例。

public void ProcessRequest(HttpContext context) 
{ 
    ... 
}