2009-01-09 42 views
9

我想爲個人項目編寫一個C#http服務器,我想知道如何將返回的服務器頭從Microsoft-HTTPAPI/2.0更改爲其他內容?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的速度要快得多,多線程善 – 2010-02-02 11:22:35

+0

在基本層面,我懷疑`HttpListener`調用'http.sys`,從而在HTTP內核隊列應該是相同的 – Sebastian 2013-12-16 18:59:24

回答

10

HttpListener類封裝了本地API HttpSendHttpResponse Function,如鏈接中所述將始終追加荒謬的文本到服務器頭信息。

沒有辦法如何解決這個問題,除非你想從頭開始編寫你的HttpListener。

1

我沒有嘗試,但它與 我的個人服務器Microsoft-HTTPAPI/2.0

我也用不出來,設置,刪除,添加的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); 
     } 
回來

謝謝 Elijah

+0

你能更新的原代碼, 請? – arul 2009-01-09 07:55:41

6

我知道我有點晚了,但我最近剛剛嘗試做同樣的事情,而且我意外地遇到了可行的解決方案,但我不確定它是否會產生任何影響。

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