Пример #1
0
        private static async Task <Context.HttpRequest> GetRequest(HttpContext context)
        {
            var header = context.Features.Request.Headers as Kooboo.HttpServer.Http.HttpRequestHeaders;

            Context.HttpRequest httprequest = new Context.HttpRequest();

            // httprequest.Host

            if (header != null && header.HeaderHost.Any())
            {
                string host = header.HeaderHost.First();

                int delimiterIndex = host.IndexOf(":");
                if (delimiterIndex > 0)
                {
                    host = host.Substring(0, delimiterIndex);
                }
                httprequest.Host = host;
            }

            httprequest.Path = context.Features.Request.Path;
            var url = GetUrl(context.Features.Request.RawTarget);

            httprequest.Url            = url;
            httprequest.RawRelativeUrl = url;
            httprequest.Method         = context.Features.Request.Method.ToUpper();
            httprequest.IP             = context.Features.Connection.RemoteEndPoint.Address.ToString();


            httprequest.Port   = context.Features.Connection.LocalEndPoint.Port;
            httprequest.Scheme = context.Features.Request.Scheme;

            foreach (var item in header)
            {
                httprequest.Headers.Add(item.Key, item.Value);
            }

            var headerip = httprequest.Headers.Get("X-Forwarded-For");

            if (!string.IsNullOrWhiteSpace(headerip))
            {
                httprequest.IP = headerip;
            }


            foreach (var item in context.Features.Request.Query)
            {
                httprequest.QueryString.Add(item.Key, item.Value);
            }
            httprequest.Cookies = GetCookie(context);

            if (httprequest.Method != "GET")
            {
                if (context.Features.Request.Body != null && context.Features.Request.Body.CanRead)
                {
                    MemoryStream ms   = new MemoryStream();
                    var          body = context.Features.Request.Body;
                    await context.Features.Request.Body.CopyToAsync(ms);

                    httprequest.PostData = ms.ToArray();
                    ms.Dispose();
                }


                var contenttype = httprequest.Headers.Get("Content-Type");
                if (contenttype != null && contenttype.ToLower().Contains("multipart"))
                {
                    var formresult = Kooboo.Lib.NETMultiplePart.FormReader.ReadForm(httprequest.PostData);

                    httprequest.Forms = new NameValueCollection();
                    if (formresult.FormData != null)
                    {
                        foreach (var item in formresult.FormData)
                        {
                            httprequest.Forms.Add(item.Key, item.Value);
                        }
                    }

                    httprequest.Files = formresult.Files;
                }
                else
                {
                    httprequest.Forms.Add(GetForm(httprequest.PostData, contenttype));
                }
            }
            return(httprequest);
        }
Пример #2
0
            private static Context.HttpRequest GetRequest(IFeatureCollection requestFeature)
            {
                // var header = context.Features.Request.Headers as Kooboo.HttpServer.Http.HttpRequestHeaders;
                Context.HttpRequest httprequest = new Context.HttpRequest();
                var req = requestFeature.Get <IHttpRequestFeature>();

                var connection = requestFeature.Get <IHttpConnectionFeature>();

                httprequest.Port = connection.LocalPort;
                httprequest.IP   = connection.RemoteIpAddress.ToString();

                Microsoft.Extensions.Primitives.StringValues host;
                req.Headers.TryGetValue("Host", out host);

                httprequest.Host = host.First().ToString();

                foreach (var item in req.Headers)
                {
                    httprequest.Headers.Add(item.Key, item.Value);
                }

                httprequest.Path           = req.Path;
                httprequest.Url            = GetUrl(req.RawTarget);
                httprequest.RawRelativeUrl = httprequest.Url;
                httprequest.Method         = req.Method;

                httprequest.Scheme = req.Scheme;


                httprequest.QueryString = GetQueryString(requestFeature);

                httprequest.Cookies = GetCookie(requestFeature);

                if (httprequest.Method != "GET")
                {
                    if (req.Body != null && req.Body.CanRead)
                    {
                        MemoryStream ms   = new MemoryStream();
                        var          body = req.Body;
                        req.Body.CopyTo(ms);
                        httprequest.PostData = ms.ToArray();
                        ms.Dispose();
                    }

                    var contenttype = httprequest.Headers.Get("Content-Type");
                    if (contenttype != null && contenttype.ToLower().Contains("multipart"))
                    {
                        var formresult = Kooboo.Lib.NETMultiplePart.FormReader.ReadForm(httprequest.PostData);

                        httprequest.Forms = new NameValueCollection();
                        if (formresult.FormData != null)
                        {
                            foreach (var item in formresult.FormData)
                            {
                                httprequest.Forms.Add(item.Key, item.Value);
                            }
                        }

                        httprequest.Files = formresult.Files;
                    }
                    else
                    {
                        httprequest.Forms.Add(GetForm(httprequest.PostData, contenttype));
                    }
                }
                return(httprequest);
            }