2013-03-29 80 views
0

我似乎無法在以下簡單的Web服務器應用程序中檢索任何發佈數據。 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 - 我需要輸入標籤中的名稱屬性才能讓它顯示在發佈數據中。

有10多個小時我永遠不會回來!