質問

個人プロジェクト用にC#httpサーバーを作成しようとしていますが、返されたサーバーヘッダーをMicrosoft-HTTPAPI / 2.0から別のものに変更するにはどうすればよいですか?

 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);
        }
    }
役に立ちましたか?

解決

HttpListenerクラスは、ネイティブAPI HttpSendHttpResponse関数。リンクに記載されているように、サーバーヘッダー情報に常に不適切なテキストが追加されます。

最初からHttpListenerをコーディングしたいのでなければ、それを修正する方法はありません。

他のヒント

少し遅れていることはわかっていますが、最近同じことをしようとしていたので、誤って機能するソリューションに出くわしましたが、影響があるかどうかはわかりません。

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

試しましたが、戻ってきます 個人用サーバー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);
        }

ありがとう エリヤ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top