首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Kontent交付客户端中记录HttpClient请求?

如何在Kontent交付客户端中记录HttpClient请求?
EN

Stack Overflow用户
提问于 2019-11-25 18:45:39
回答 3查看 448关注 0票数 1

如何在这里记录肯蒂科肯登特.NET交付API的HTTP请求:https://github.com/Kentico/kontent-delivery-sdk-net

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-26 10:43:15

您可以充实HttpClient并将其注入DeliveryClient

充实:

代码语言:javascript
复制
    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

代码语言:javascript
复制
        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);

注入:

代码语言:javascript
复制
        var deliveryClient = DeliveryClientBuilder
            .WithOptions(_ => deliveryOptions)
            .WithHttpClient(httpClient)
            .Build();

追加资源:

票数 3
EN

Stack Overflow用户

发布于 2020-03-02 14:13:50

使用替代方法HttpClientFactory:

代码语言:javascript
复制
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

代码语言:javascript
复制
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;
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2020-05-28 09:51:37

另一种方法是使用Serilog.AspNetCore NuGet包:https://github.com/serilog/serilog-aspnetcore

Program.cs

代码语言:javascript
复制
public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            .UseSerilog(); // <-- Add this line;
}

Startup.cs

代码语言:javascript
复制
public void Configure(IApplicationBuilder app)
{
  app.UseSerilogRequestLogging();
}

示例代码:https://github.com/Kentico/kontent-sample-app-net/commit/44f1a0e6b245b7ad0be2f0e48a1085adbf80584a

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59038293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档