C# 如何从HttpListener服务相关文件

C# 如何从HttpListener服务相关文件,c#,html,httplistener,C#,Html,Httplistener,我正在学习HttpListener。我正在使用HttpListener(如下所示)创建一个小应用程序,它是一个Web服务器 及)。注意,没有ASP.NET内容 在从\u responderMethod调用的函数中,我基本上返回HTML(从磁盘上的物理文件读取),其中包含以下内容: ... <link href="css/ui-lightness/jquery-ui-1.10.4.custom.css" rel="stylesheet"> <script src

我正在学习
HttpListener
。我正在使用
HttpListener
(如下所示)创建一个小应用程序,它是一个Web服务器 及)。注意,没有ASP.NET内容

在从
\u responderMethod
调用的函数中,我基本上返回HTML(从磁盘上的物理文件读取),其中包含以下内容:

   ...
   <link href="css/ui-lightness/jquery-ui-1.10.4.custom.css" rel="stylesheet">
   <script src="js/jquery-1.10.2.js"></script>
   <script src="js/jquery-ui-1.10.4.custom.js"></script>
   ...
类构造函数几乎是:

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

    public WebServer(string[] prefixes, Func<HttpListenerRequest, string> method)
    { 
        // A responder method is required
        if (method == null)
            throw new ArgumentException("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) { }
我的
SendResponse()


如果HTML指定站点上的脚本或CSS文件,客户端浏览器将请求它们。您的服务器也必须提供这些文件。脚本和CSS文件是文本文件,您提供这些文件的方式与提供HTML文件的方式大致相同,不过您需要确保相应地更改内容类型标题。您以二进制格式提供二进制文件(图像等)。同样,您需要确保将内容类型设置为指示它是图像。

我编辑了您的问题。与普通论坛网站不同,我们不需要在问题标题中添加标签,也不需要在问题中添加诸如
hi
thanking
之类的称呼。您能在问题中添加代码,向听众展示方法吗?它将使用HttpListener.Start方法调用。客户端将向服务器请求这些文件。您是否看到客户端(我假设它是一个浏览器)对.css和.js文件的请求?如果是的话,你在为他们服务吗?当您提供HTML时,您将什么设置为响应内容类型?嘿,亚当,吉姆,非常感谢您的帮助。我现在用更多的代码更新了我的帖子@JimMischel客户端是一个浏览器,让我检查一下我是否收到了这些文件的请求…我想我没有收到这些请求…实际上,我正在request.m_RawUrl中获得请求的文件!我不知道为什么我在发布之前没有检查。现在是为他们服务的问题。与File.ReadAllText(如果是text)和File.ReadAllBytes(如果是PNG文件的二进制文件)一样,首选的方法是什么?嗨,吉姆,谢谢,我已经成功了。正如您所提到的,我需要返回内容类型,并从文件中以字节[]的形式返回数据。ReadAllBytes,谢谢!
public class WebServer
{
    private readonly HttpListener _listener = new HttpListener();
    private readonly Func<HttpListenerRequest, string> _responderMethod;

    public WebServer(string[] prefixes, Func<HttpListenerRequest, string> method)
    { 
        // A responder method is required
        if (method == null)
            throw new ArgumentException("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("Webserver running...");
        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 { } // suppress any exceptions
                    finally
                    {
                        // always close the stream
                        ctx.Response.OutputStream.Close();
                    }
                }, _listener.GetContext());
            }
        }
        catch { } // suppress any exceptions
    });
}
public string SendResponse(HttpListenerRequest request)
{
      return File.ReadAllText(@"static\index.html");
}