.NET handlepostrequest - получение данных - PullRequest
1 голос
/ 05 сентября 2011

Я отправляю данные POST на простой сервер .NET. Среди заголовков у меня есть некоторые другие детали, которые упакованы как поток ввода в отправку данных POST. Как получить их с помощью 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));

    }

Все, что я получаю, это длина_содержания, но мне нужно получить данные из потока. Поток собирается с помощью inputStream = new BufferedStream (socket.GetStream ()); И в этом потоке у меня есть значение "registration" = "123456789", как его получить?

Спасибо

1 Ответ

1 голос
/ 05 сентября 2011

Вот, пожалуйста.

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

Хотя, если все, что вам нужно, это registration.

var registration = Request["registration"];

Все в основном на Request экземпляре, к которому можно получить доступ из Page, WebControl или HttpContext.Current.Request. В случае HttpHandler экземпляр HttpContext передается для вас.

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