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); }
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); }