質問
個人プロジェクト用に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);
}
ありがとう エリヤ
所属していません StackOverflow