سؤال

أنا أحاول كتابة C# http server على مشروع شخصي ، أنا أتساءل كيف يمكنني تغيير عاد الخادم رأس من مايكروسوفت-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 الدرجة بتغليف native API ، HttpSendHttpResponse وظيفة, التي كما جاء في الرابط دائما إلحاق غير معقول النص إلى خادم معلومات رأس.

لا توجد طريقة لحل هذه المشكلة, إلا إذا كنت تريد أن التعليمات البرمجية الخاصة بك HttpListener من الصفر.

نصائح أخرى

وأعرف أنني في وقت متأخر قليلا لكن كنت أحاول فقط مؤخرا أن تفعل الشيء نفسه، وجئت بطريق الخطأ عبر الحل الذي يعمل ولكن أنا متأكد إذا كان لديه أي تداعيات.

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

وأنا لم تحاول، ولكنه يعود مع بلدي خادم شخصية مايكروسوفت 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