如何在这里记录肯蒂科肯登特.NET交付API的HTTP请求:https://github.com/Kentico/kontent-delivery-sdk-net
具体来说,我要寻找的是如何将HTTP请求记录到delivery.kentico.ai (您从其中检索内容JSON的终点)。
发布于 2019-11-26 10:43:15
您可以充实HttpClient并将其注入DeliveryClient。
充实:
public class LoggingHandler : DelegatingHandler
{
public LoggingHandler(HttpMessageHandler innerHandler, Microsoft.Extensions.Logging.ILogger logger)
: base(innerHandler)
{
Logger = logger;
}
public Microsoft.Extensions.Logging.ILogger Logger { get; }
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
Logger.LogInformation(request.Method + " " + request.RequestUri);
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
Logger.LogInformation(response.StatusCode + " " + response.Content.Headers);
return response;
}
}使用,例如Serilog
services.AddLogging(builder =>
{
// Add Serilog
builder.AddSerilog(new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.File("logs\\log.log", rollingInterval: RollingInterval.Day)
.CreateLogger());
});
var serviceProvider = services.BuildServiceProvider();
var logger = serviceProvider.GetRequiredService<ILogger<Startup>>();
HttpClient httpClient = new HttpClient(new LoggingHandler(new HttpClientHandler(), logger));
var deliveryOptions = new DeliveryOptions();
Configuration.GetSection(nameof(DeliveryOptions)).Bind(deliveryOptions);注入:
var deliveryClient = DeliveryClientBuilder
.WithOptions(_ => deliveryOptions)
.WithHttpClient(httpClient)
.Build();追加资源:
发布于 2020-03-02 14:13:50
使用替代方法HttpClientFactory:
public void ConfigureServices(IServiceCollection services)
{
services.AddLogging(builder =>
{
// Add Serilog
builder.AddSerilog(new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.File("logs\\log.log", rollingInterval: RollingInterval.Day)
.CreateLogger());
});
services.AddTransient<LoggingHandler>();
services.AddHttpClient("FactoryClient", c => { /* Do whatever else you wish here... */ })
.AddHttpMessageHandler<LoggingHandler>()
.AddTypedClient(c => DeliveryClientBuilder.WithOptions(...).WithHttpClient(c).Build());
services.AddControllersWithViews();
}LoggingHandler.cs
public class LoggingHandler : DelegatingHandler
{
public Microsoft.Extensions.Logging.ILogger Logger { get; }
public LoggingHandler(ILoggerFactory loggerFactory) : base()
{
Logger = loggerFactory.CreateLogger<LoggingHandler>();
}
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
Logger.LogInformation(request.Method + " " + request.RequestUri);
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
Logger.LogInformation(response.StatusCode + " " + response.Content.Headers);
return response;
}
}发布于 2020-05-28 09:51:37
另一种方法是使用Serilog.AspNetCore NuGet包:https://github.com/serilog/serilog-aspnetcore
Program.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseSerilog(); // <-- Add this line;
}Startup.cs
public void Configure(IApplicationBuilder app)
{
app.UseSerilogRequestLogging();
}示例代码:https://github.com/Kentico/kontent-sample-app-net/commit/44f1a0e6b245b7ad0be2f0e48a1085adbf80584a
https://stackoverflow.com/questions/59038293
复制相似问题