Заголовок сервера HttpListener c # - PullRequest
10 голосов
/ 09 января 2009

Я пытаюсь написать сервер 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);
        }
    }

Ответы [ 3 ]

9 голосов
/ 09 января 2009

Класс HttpListener инкапсулирует собственный API, Функция HttpSendHttpResponse , которая, как указано в ссылке, всегда добавляет нелепый текст к информации заголовка сервера.

Нет способа как это исправить, если только вы не хотите кодировать ваш HttpListener с нуля.

7 голосов
/ 19 апреля 2015

Я знаю, что немного опоздал, но я только недавно пытался сделать то же самое, и я случайно наткнулся на решение, которое работает, но я не уверен, есть ли у него какие-либо последствия.

Response.Headers.Add("Server", "\r\n\r\n");
1 голос
/ 09 января 2009

Я пытался, но возвращается Мой Персональный Сервер 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);
        }

Спасибо Илия

...