我想记录对我的服务的请求的响应内容,我想知道最好的方法是什么。以下是我的具体要求:
- 响应内容应该在整个管道中序列化一次。
- 仅响应内容,没有标头等。
- 日志记录适用于所有 API 的子集。
简而言之,我想为所有 API 的一个子集添加日志记录,同时尽可能减少开销。我不想为所有 API 添加日志记录的原因是因为我们有一个负载均衡器重复访问其中一个 API,并且记录这些请求对我们没有用处。
我见过的满足第一个要求的唯一示例使用 IHttpModule 并替换过滤器(例如,在 ASP.NET MVC 和 IIS7 中记录原始 HTTP 请求/响应)。但是,使用 IHttpModule 将记录所有 API 响应,这不符合要求 3。更换过滤器也不容易满足要求 2(标头在哪里结束,内容从哪里开始?)。
由于要求 2 和 3,我倾向于使用 ActionFilterAttribute 和 IFilterProvider 进行日志记录(例如http://haacked.com/archive/2011/04/25/conditional-filters.aspx/),但我还没有看到方法在这种情况下满足要求 1。
一个技巧是将 HTTP 内容作为序列化的 StringContent 而不是 ObjectContent 返回,但这违反了 ASP.NET 中的功能,例如选择 AcceptType。