【问题标题】:Is it possible to use Audit.Net with httpClient to capture external requests是否可以使用 Audit.Net 和 httpClient 来捕获外部请求
【发布时间】:2019-05-22 13:09:21
【问题描述】:

使用 Audit.Net 是否可以为 httpClient 请求创建审核范围,类似于 MVC.Core 或 WebAPI.Core 中间件?

我已经尝试过类似的方法,但没有多大成功,通常它会使应用程序超时。

AuditScope scope = null;
try {
 using(HttpClient client = new HttpClient) {

  scope = await AuditScope.CreateAsync("",() => client)
  // code to initialise the Httpclient
 }
}
finally {
 await scope.DisposeAsync();
}

【问题讨论】:

    标签: dotnet-httpclient audit.net


    【解决方案1】:

    我认为连接到HttpClient 的唯一选择是使用自定义HttpClientHandler,这样您就可以拦截其余的调用。

    举个例子:

    public class AuditClientHandler : HttpClientHandler
    {
        protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var options = new AuditScopeOptions()
            {
                EventType = $"{request.Method.Method} {request.RequestUri.AbsoluteUri}",
                CreationPolicy = EventCreationPolicy.InsertOnStartReplaceOnEnd,
                ExtraFields = new
                {
                    request = GetRequestAudit(request)
                }
            };
            using (var scope = AuditScope.Create(options))
            {
                var response = await base.SendAsync(request, cancellationToken);
                scope.SetCustomField("response", GetResponseAudit(response));
                return response;
            } 
        }
    }
    

    我使用了InsertOnStartReplaceOnEnd创建策略,所以请求在发送到服务器之前被保存,响应被添加到事件中并在之后保存。

    GetRequestAudit/GetResponseAudit 的实现由你决定,只需返回一个包含你想要记录的信息的对象(可以序列化)。

    所以每次需要审核HttpClient 实例时,都需要将处理程序传递给它的构造函数:

    var cli = new HttpClient(new AuditClientHandler());
    var response = await cli.GetAsync("http://google.com");
    

    无论如何,我会评估提供一个带有可配置处理程序的新库 (Audit.HttpClient?),以便实现更简洁。

    更新

    您现在可以使用 Audit.HttpClient 扩展来实现更简洁的实现。看看文档here

    【讨论】:

    • 将跟踪新的扩展实现here
    猜你喜欢
    • 1970-01-01
    • 2020-04-18
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2017-07-30
    相关资源
    最近更新 更多