运行 JavaScript Web 服务器上使用 c# 的方法

Run JavaScript method on Web Server using c#

我正在尝试在 C# 生成的 Web 服务器上执行一个简单的 Javascript 方法。我可以将网络服务器连接到 运行 并生成一个带有按钮的简单网页,但我似乎无法将按钮连接到 运行 js .

Using System;
using System.Net;
using System.Threading;
using System.Linq; 
using System.Text;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.Web.UI.HtmlControls;
//using System.Web.UI.Page;

namespace SimpleWebServer
{
class Program
{
   static void Main(string[] args)
    {
        WebServer ws = new WebServer(SendResponse, "http://localhost:8080/test/");
       // ClientScript.RegisterStartupScript(page.GetType(), "hwa", "alert('Hello World');", true);    
        Console.WriteLine("A simple webserver. Press a key to quit.");
        Console.ReadKey();
        ws.Stop();

    }

    public static string SendResponse(HttpListenerRequest request)
    {
        ws = WebServer;
     //return string.Format("<HTML><HEAD><script src='D:/Script1.js'></script></HEAD><BODY><INPUT type='button' value='Button' runat='server' id='Button1' onClick='buttonClicked()';></BODY></HTML>)");
       ClientScript.RegisterStartupScript(page.GetType(), "hwa", "alert('Hello World');", true);
        return string.Format("<HTML><HEAD><script= alert('button click called');</HEAD><BODY><INPUT type='button' value='Button' runat='server' id='Button1' onClick='alert('button click called')';></BODY></HTML>)");

JS脚本代码如下:

function buttonClicked() {
    alert('button click called');
}

Web服务器代码如下:

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

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

    public WebServer(string[] prefixes, Func<HttpListenerRequest, string> method)
    {
        if (!HttpListener.IsSupported)
            throw new NotSupportedException(
                "Needs Windows XP SP2, Server 2003 or later.");

        // URI prefixes are required, for example 
        // "http://localhost:8080/index/".
        if (prefixes == null || prefixes.Length == 0)
            throw new ArgumentException("prefixes");

        // 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) { }
  //  protected void Button1_Click(Object sender, EventArgs e)
   // {
  //      Button1.Text = "Server click handler called.";
  //  }
    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 void Stop()
    {
        _listener.Stop();
        _listener.Close();
    }
}
}

这行代码中的html和javascript是错误的

return string.Format("<HTML><HEAD><script= alert('button click called');</HEAD><BODY><INPUT type='button' value='Button' runat='server' id='Button1' onClick='alert('button click called')';></BODY></HTML>)");

它应该类似于下面的代码

<HTML>
<HEAD>
    <script>
       alert('button click called');
    </script>
</HEAD>
<BODY>
    <INPUT type='button' value='Button' runat='server' id='Button1' onClick='alert("button click called");'>
</BODY>
</HTML>

将您的 return 语句替换为以下代码:

 return string.Format("<HTML> <HEAD><script>alert('button click called');</script> </HEAD> <BODY><INPUT type='button' value='Button' runat='server' id='Button1' onClick='alert("button click called");'></BODY></HTML>");