public CoreHttpRequest(Microsoft.AspNetCore.Http.HttpRequest request, IRazorViewEngine razorViewEngine, CancellationToken cancellationToken) { this.uri = request.GetAbsoluteUri(); this.request = request; this.CancellationToken = cancellationToken; this.Properties = new Dictionary <string, object>(); this.Headers = request.Headers .Select(kvp => kvp.Key.PairWithValue((string[])kvp.Value)) .ToDictionary(); this.Method = new HttpMethod(request.Method); this.RazorViewEngine = razorViewEngine; }
/// <summary> /// 获取请求日志 /// </summary> /// <param name="request"></param> /// <returns></returns> public static async Task <string> RequestStringAsync(this HttpRequest request) { var message = new StringBuilder(); if (request.Method != null) { message.AppendLine($"[Method]: {request.Method} "); } message.AppendLine($"[RequestUri]: {request.GetAbsoluteUri()} "); //头部Header if (request.Headers != null) { message.AppendLine("[Header] Values: "); foreach (var headerItem in request.Headers) { message.AppendLine($"--> [{headerItem.Key}]: {headerItem.Value} "); } } //Body if (!string.IsNullOrWhiteSpace(request.Method) && !request.Method.ToUpper().Equals("GET") && !request.Headers["Content-Type"].ToString().ToLower().Equals("multipart/form-data")) { request.EnableBuffering(); await request.Body.DrainAsync(CancellationToken.None); request.Body.Seek(0L, SeekOrigin.Begin); var bodyContent = string.Empty; await using (var ms = new MemoryStream(2048)) { request.Body.Position = 0; request.Body.CopyTo(ms); var content = ms.ToArray(); bodyContent = Encoding.UTF8.GetString(content); } message.AppendLine("[Body]: "); message.AppendLine($"--> {bodyContent}"); request.Body.Seek(0L, SeekOrigin.Begin); } return(message.ToString()); }
private static HttpRequestMessage SetAbsoluteUri(this HttpRequestMessage msg, Microsoft.AspNetCore.Http.HttpRequest req) => msg.Set(m => m.RequestUri = req.GetAbsoluteUri());