2009-01-09 10 views
9

J'essaie d'écrire un serveur http C# pour un projet personnel, je me demande comment je peux changer l'en-tête du serveur retourné de Microsoft-HTTPAPI/2.0, à quelque chose d'autre?HttpListener Server Header 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 est beaucoup plus rapide, Bonté multi-thread –

+0

Au niveau de base, je pense que '' HttpListener' appelle http.sys', donc la file d'attente du noyau Http devrait être le même – Sebastian

Répondre

10

La classe HttpListener encapsule l'API native, HttpSendHttpResponse Function, qui, comme indiqué dans le lien sera toujours ajouter le texte absurde à l'information d'en-tête du serveur.

Il n'y a aucun moyen de résoudre ce problème, sauf si vous voulez coder votre HttpListener à partir de zéro.

1

J'ai essayé, mais il revient avec My Personal serveur Microsoft-HTTPAPI/2.0

J'ai aussi utilisé sans succès, ensemble, supprimer, ajouter, 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); 
     } 

Merci Elijah

+0

Pourriez-vous mettre à jour le code d'origine , S'il vous plaît? – arul

+0

Ne fonctionne pas pour moi –

6

Je sais que je suis un peu en retard, mais j'ai récemment essayé de faire la même chose et je suis tombé par hasard sur une solution qui fonctionne mais je ne sais pas si elle a des répercussions.

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

Oui, cette ligne par elle-même supprime l'en-tête du serveur en réponse. Mais quand, après cela, j'ajoute un autre en-tête de serveur, je reçois ceci: **, Mon serveur! Microsoft-HTTPAPI/2.0 ** – Milad

Questions connexes