Frage

Ich versuche, einen C # http-Server für ein persönliches Projekt zu schreiben, ich frage mich, wie ich die Server-Header von Microsoft-HTTPAPI zurück ändern kann / 2.0, um etwas anderes?

 public class HttpWebServer
    {
        private HttpListener Listener;

        public void Start()
        {
            Listener = new HttpListener();
            Listener.Prefixes.Add("http://*:5555/");
            Listener.Start();
            Listener.BeginGetContext(ProcessRequest, Listener);
            Console.WriteLine("Connection Started");
        }

        public void Stop()
        {
            Listener.Stop();
        }

        private void ProcessRequest(IAsyncResult result)
        {
            HttpListener listener = (HttpListener)result.AsyncState;
            HttpListenerContext context = listener.EndGetContext(result);

            string responseString = "<html>Hello World</html>";
            byte[] buffer = Encoding.UTF8.GetBytes(responseString);

            context.Response.ContentLength64 = buffer.Length;
            System.IO.Stream output = context.Response.OutputStream;
            output.Write(buffer, 0, buffer.Length);
            output.Close();

            Listener.BeginGetContext(ProcessRequest, Listener);
        }
    }
War es hilfreich?

Lösung

Die Httplistener-Klasse kapselt die native API, HttpSendHttpResponse Funktion , die wie in der Verbindung angegeben wird den absurden Text an den Server-Header-Informationen immer anhängen.

Es gibt keinen Weg, wie das beheben, wenn Sie Ihre Httplistener von Grund auf neu codieren möchten.

Andere Tipps

Ich weiß, dass ich ein wenig zu spät bin, aber ich habe versucht, erst vor kurzem die gleiche Sache zu tun und ich auf eine Lösung aus Versehen kam, das funktioniert, aber ich bin nicht sicher, ob es irgendwelche Auswirkungen hat.

Response.Headers.Add("Server", "\r\n\r\n");

Ich habe versucht, aber es kommt wieder mit My Personal Server Microsoft-HTTPAPI / 2.0

Ich habe auch ohne Erfolg verwendet, setzen, entfernen, hinzufügen, addHeader

private void ProcessRequest(IAsyncResult result)
        {
            HttpListener listener = (HttpListener)result.AsyncState;
            HttpListenerContext context = listener.EndGetContext(result);

            string responseString = "<html>Hello World</html>";
            byte[] buffer = Encoding.UTF8.GetBytes(responseString);
            context.Response.ContentLength64 = buffer.Length;

            //One
            context.Response.AddHeader("Server", "My Personal Server");

            //Two
            context.Response.Headers.Remove(HttpResponseHeader.Server);
            context.Response.Headers.Add(HttpResponseHeader.Server, "My Personal Server");

            //Three
            context.Response.Headers.Set(HttpResponseHeader.Server, "My Personal Server");

            System.IO.Stream output = context.Response.OutputStream;
            output.Write(buffer, 0, buffer.Length);
            output.Close();

            Listener.BeginGetContext(ProcessRequest, Listener);
        }

Danke Elia

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top