0

我似乎无法在以下简单的 Web 服务器应用程序中检索任何帖子数据。request.InputStream 从不返回任何内容。

来自发布表单的 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();
    }
}
4

1 回答 1

3

DOH - 我需要输入标签中的名称属性以使其显示在帖子数据中。

有10多个小时我再也回不来了!

于 2013-04-01T18:45:19.713 回答