首页 > 解决方案 > 如何在 Kentico Kontent .NET Delivery Client 中记录 HttpClient 请求?

问题描述

您如何在此处记录 Kentico Kontent .NET 交付 API 的 HTTP 请求:https ://github.com/Kentico/kontent-delivery-sdk-net

具体来说,我正在寻找的是如何将 HTTP Get 请求记录到 delivery.kentico.ai(您从中检索内容 JSON 的端点)。

标签: kentico-kontent

解决方案


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

其他资源:


推荐阅读