如何将字符串http响应解析为HttpResponseMessage对象c#

问题描述

我正在尝试在 c# 中为 unix 套接字编写一个 DelegateHandler,我觉得我已经掌握了大部分方法,但我不想将所有内容都放在子字符串中以将响应的内容放入实际的 HttpResonseMessage 对象中。我想知道是否有人知道将 http 响应字符串解析为实际对象的快速方法。这就是我现在所拥有的。

namespace unixHttpConverter
{
    class UnixHttpMessageHandler : DelegatingHandler
    {
        private Socket unixSocket;
        private readonly object unixSocketLock;
        
        public UnixHttpMessageHandler(string path) {
            this.unixSocketLock = new object();
            this.unixSocket = new Socket(AddressFamily.Unix,SocketType.Stream,ProtocolType.IP);
            unixSocket.ReceiveTimeout = 2000;
            unixSocket.Connect(new UnixDomainSocketEndPoint(path));
        }
        protected async override Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request,CancellationToken cancellationToken) {
            if (request == null){
                throw new ArgumentNullException("request");
            }
            string HTTP_Request = String.Format("{0} {1}{2} HTTP/{3}\r\nHost:{4}:{5}\r\nUser-Agent:{6}\r\n{7}\r\nAccept: */*\r\n\r\n{8}",request.Method.Method,request.RequestUri.PathAndQuery,request.RequestUri.Fragment,request.Version.ToString(),request.RequestUri.Host,request.RequestUri.Port,"C#",request.Content.Headers.ToString().Trim(),request.Content.ReadAsstringAsync().Result
                );
            byte[] request_bytes = Encoding.ASCII.GetBytes(HTTP_Request);
            return await Task<HttpResponseMessage>.Run(() => sendViaSocket(request_bytes),cancellationToken);
        }
        private HttpResponseMessage sendViaSocket(byte[] request_bytes) {
            List<byte> bytes = new List<byte>();
            lock(unixSocketLock)
            {
                unixSocket.Send(request_bytes);
                byte[] recvBytes = new byte[1024];
                int numBytes = 0;
                do
                {
                    numBytes = unixSocket.Receive(recvBytes,1024,SocketFlags.None);
                    bytes.AddRange(recvBytes);
                } while (numBytes == 1024);
                unixSocket.disconnect(true);
            }
            //if not equal to 1024 then we have collected all bytes
            string str_result = Encoding.ASCII.GetString(bytes.ToArray());
            HttpResponseMessage result = new HttpResponseMessage();
            // 012345678ABCDEF
            // HTTP/1.1 200 OK
            result.StatusCode = (HttpStatusCode)Enum.Parse(typeof(HttpStatusCode),str_result.Substring(10,3)); 
            return null;
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)