【发布时间】:2018-03-03 20:53:14
【问题描述】:
我想用方法、路径、正文和其他信息记录传入的请求。我的问题是,在记录我需要的控制器后,控制器只得到一个空变量作为方法参数。我正在使用 .net core 1.1、IIoggerFactory、Serilog 扩展和以下中间件方法:
public async Task Invoke(HttpContext context)
{
StringValues sessionId;
var session = string.Empty;
if (context.Request.Headers.TryGetValue("X-SessionID", out sessionId))
{
session = sessionId.FirstOrDefault();
if (session != null)
{
var requestBodyStream = new MemoryStream();
var originalRequestBody = context.Request.Body;
await context.Request.Body.CopyToAsync(requestBodyStream);
requestBodyStream.Seek(0, SeekOrigin.Begin);
var url = UriHelper.GetDisplayUrl(context.Request);
var requestBodyText = new StreamReader(requestBodyStream).ReadToEnd();
_logger.LogDebug($"{session} {context.Request.Method} {url} {requestBodyText}");
requestBodyStream.Seek(0, SeekOrigin.Begin);
context.Request.Body = requestBodyStream;
await _next(context);
context.Request.Body = originalRequestBody;
}
}
await _next(context);
}
如何记录请求并在中间件之后为控制器保留请求正文?
【问题讨论】:
-
@jmunoa7 谢谢,我的问题是我在方法的末尾留下了一个 else。
-
在 ASP.NET Core 6.0 预览版中,您似乎已经能够注入 HttpLogging。
标签: c# asp.net-mvc asp.net-core