2009-01-09 16 views
9

Estoy tratando de escribir un servidor http C# para un proyecto personal, me pregunto cómo puedo cambiar el encabezado del servidor devuelto de Microsoft-HTTPAPI/2.0 a otra cosa?Cabecera del servidor HttpListener C#

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); 
     } 
    } 
+1

IIS7 es mucho más rápido, Bondad –

+0

Multi-roscado en el nivel básico, sospecho que '' HttpListener' llama http.sys', tanto la cola de Http núcleo debe ser el mismo – Sebastian

Respuesta

10

La clase HttpListener encapsula la API nativa, HttpSendHttpResponse Function, que como se indica en el enlace siempre se adjuntará el texto absurdo para la información del encabezado del servidor.

No hay forma de solucionarlo, a menos que desee codificar su HttpListener desde cero.

1

Yo probé, pero se vuelve con Mi servidor personales de Microsoft-HTTPAPI/2.0

También he utilizado sin éxito, establecer, eliminar, agregar, 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); 
     } 

Gracias Elijah

+0

Podría actualizar el código original , ¿Por favor? – arul

+0

No funciona para mí –

6

Sé que llegué un poco tarde pero hace poco intenté hacer lo mismo y accidentalmente encontré una solución que funciona, pero no estoy seguro si tiene alguna repercusión.

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

Sí, esta línea por sí sola elimina el encabezado del servidor en respuesta. Pero cuando después de eso agrego otro encabezado de servidor, obtengo esto: **, My Server! Microsoft-HTTPAPI/2.0 ** – Milad