我很难在 ASP.NET Core Web API 中捕获用于记录目的的 HTTP 请求。我在这里找到了一个例子
http://dotnetliberty.com/index.php/2016/01/07/logging-asp-net-5-requests-using-middleware/
这有帮助。它基本上是一个使用中间件功能添加到 HTTP 请求管道的日志记录类。问题是类方法只在应用程序启动时被调用。我无法在我的任何 get 或 post http 请求上调用它。get 或 post http 请求正在工作,因为我可以调试并且响应正常,我尝试在控制台应用程序中使用 Fiddler 和 http 客户端。
这是我的日志记录类
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
namespace CoreWebAPI.Models
{
public class RequestLoggingMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger<RequestLoggingMiddleware> _logger;
public RequestLoggingMiddleware(RequestDelegate next, ILogger<RequestLoggingMiddleware> logger)
{
_next = next;
_logger = logger;
}
public async Task Invoke(HttpContext context)
{
var startTime = DateTime.UtcNow;
var watch = Stopwatch.StartNew();
await _next.Invoke(context);
watch.Stop();
var logTemplate = @"
Client IP: {clientIP}
Request path: {requestPath}
Request content type: {requestContentType}
Request content length: {requestContentLength}
Start time: {startTime}
Duration: {duration}";
_logger.LogInformation(logTemplate,
context.Connection.RemoteIpAddress.ToString(),
context.Request.Path,
context.Request.ContentType,
context.Request.ContentLength,
startTime,
watch.ElapsedMilliseconds);
}
}
}
这是我的 Startup.cs 类中的 Startup.Configure 方法
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseApplicationInsightsRequestTelemetry();
app.UseApplicationInsightsExceptionTelemetry();
app.UseMvc();
app.UseCors(builder => builder.AllowAnyOrigin());
app.UseMiddleware<RequestLoggingMiddleware>();
}
最后一行是我使用 app.UseMiddleware 捎带回 HTTP 请求的地方。我认为这应该可行,但是如果有人知道为什么它不可行或替代方案会很棒。请让我知道您是否应该提供其他信息。