C# WebAPI-MessageHandler上的日志绑定信息?
我需要记录(而不是跟踪)来自webAPI(v1)的所有请求和响应,并将信息存储在DB中 我认为最合适的地方是通过C# WebAPI-MessageHandler上的日志绑定信息?,c#,asp.net-web-api,C#,Asp.net Web Api,我需要记录(而不是跟踪)来自webAPI(v1)的所有请求和响应,并将信息存储在DB中 我认为最合适的地方是通过MessageHandler 因此: public class LogRequestAndResponseHandler : DelegatingHandler { protected override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, Cancell
MessageHandler
因此:
public class LogRequestAndResponseHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
return base.SendAsync(request, cancellationToken)
.ContinueWith(task =>
{
var MyRequest = request;
var MyResponse = task.Result;
var responseBody = task.Result.Content;
//log db....
return task.Result;
}, cancellationToken);
}
}
这项请求:
http://es.com/api/claims/GetGraph?Member_ID=123&DateDiff=5&NotExists=2
问题:
是否有可能(以及如何)提取如下内容:
- 用户发送的可匹配的
值成员ID
123
- 用户发送的可匹配值
与值DateDiff
5
- 用户发送的非-可匹配的
与值NotExists
2
使用消息处理程序记录原始请求和响应是正确的,但是您是否能够使用上述代码记录请求正文?如果您实际将主体绑定到动作方法参数,那么参数绑定将实际读取并清空请求主体流。因此,我认为您将请求主体记录在任务延续中的想法行不通 在消息处理程序中记录有关绑定的数据非常复杂,并且在很大程度上取决于您的操作方法。消息处理程序请求处理在模型绑定之前运行,当响应处理部分运行时,模型的概念不存在,因为序列化已经完成。顺便说一句,当您使用JSON负载时,请查看我的博客文章,以检测请求中的额外字段 您可以编写一个操作过滤器来查看模型中的额外字段,如那篇文章中所述,并将该信息存储在请求字典(
request.Properties
)中,稍后在消息处理程序中提取该信息并写入数据库。但这并不是直截了当的
或者,查看内置跟踪程序,看看它是否有用
http://es.com/api/claims/GetGraph?Member_ID=123&DateDiff=5&NotExists=2