2013-03-29 4 views
0

다음 간단한 웹 서버 어플리케이션에서 게시물 데이터를 검색 할 수 없습니다. request.InputStream은 아무것도 반환하지 않습니다.HttpListenerRequest에서 게시물 데이터를 가져올 수 없습니다.

게시 양식의 HTML 코드에 있습니다. 그것은 매우 기본적인 것입니다. 그냥 제출 버튼입니다.

내가 누락 된 항목이 있습니까? 전에 HttpListener 어셈블리를 사용하지 않았기 때문에 간단한 것을 놓치고 있는지 알 수 없습니다. 내가 사용해야 할 다른 어셈블리가 있습니까?

도움이 필요하시면 대단히 감사하겠습니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.Threading; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     WebServer ws = new WebServer(SendResponse, "http://localhost:8088/"); 
     ws.Run(); 
     Console.WriteLine("Press any key to exit."); 
     Console.ReadKey(); 
     ws.Stop(); 
    } 

    public static string SendResponse(HttpListenerRequest request) 
    { 
     try 
     { 
      using (System.IO.StreamReader reader = new System.IO.StreamReader(request.InputStream, request.ContentEncoding)) 
      { 
       string s = reader.ReadToEnd(); 
       Console.WriteLine("InputStream: {0}", s); 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Error: {0}", ex.Message); 
     } 

     return @"<html><body><form action='http://localhost:8088/' method='post'><input type='text' value='My Input'><input type='submit'></form></body></html>"; 
    } 
} 

public class WebServer 
{ 
    private readonly HttpListener _listener = new HttpListener(); 
    private readonly Func<HttpListenerRequest, string> _responderMethod; 

    public WebServer(string[] prefixes, Func<HttpListenerRequest, string> method) 
    { 
     foreach (string s in prefixes) 
      _listener.Prefixes.Add(s); 

     _responderMethod = method; 
     _listener.Start(); 
    } 

    public WebServer(Func<HttpListenerRequest, string> method, params string[] prefixes) : this(prefixes, method) { } 

    public void Run() 
    { 
     ThreadPool.QueueUserWorkItem((o) => 
     { 
      Console.WriteLine("Listening..."); 
      try 
      { 
       while (_listener.IsListening) 
       { 
        ThreadPool.QueueUserWorkItem((c) => 
        { 
         var ctx = c as HttpListenerContext; 
         try 
         { 
          string rstr = _responderMethod(ctx.Request); 
          byte[] buf = Encoding.UTF8.GetBytes(rstr); 
          ctx.Response.ContentLength64 = buf.Length; 
          ctx.Response.OutputStream.Write(buf, 0, buf.Length); 
         } 
         catch {} 
         finally 
         { 
          ctx.Response.OutputStream.Close(); 
         } 
        }, _listener.GetContext()); 
       } 
      } 
      catch {} 
     }); 
    } 

    public void Stop() 
    { 
     _listener.Stop(); 
     _listener.Close(); 
    } 
} 

답변

3

DOH - 게시물 데이터에 표시되도록 입력 태그에 name 속성이 필요했습니다.

10 시간 이상 있습니다. 다시는 돌아올 수 없습니다!