出于日志记录的目的,我试图监视通过WebAPI发出的请求.我已创建并且我正在寻找一种方法,在请求完成并回复后,在请求中返回已发送的正文.我试图通过使用ActionFilter来做到这一点,但迄今为止从请求中读取正文失败了.
任何人都可以提供一些建议我如何获取这些信息?
对于上下文,我试图在此代码中执行此操作:
public class LoggingActionFilter : ActionFilterAttribute { public override Task OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext,CancellationToken cancellationToken) { var test = actionExecutedContext.Request.Content.ReadAsStringAsync().Result; return base.OnActionExecutedAsync(actionExecutedContext,cancellationToken); } }
我已经尝试回读actionExecutedContext变量上的内容以便返回正文但是发现这只是为了返回空白到目前为止.
解决方法
你只是处理请求体,所以不需要使用OnActionExecutedAsync方法,你可以像这样覆盖OnActionExecuting,
public override void OnActionExecuting(HttpActionContext actionContext) { var test = (actionContext.Request.Content as ObjectContent).Value.ToString(); // your logging code here }
WebAPI中另一个可用的选项是DelegatingHandler.如果你只想记录请求体,那么重写SendAsync方法,
public class ApiLogHandler : DelegatingHandler { protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,CancellationToken cancellationToken) { var requestBody = request.Content.ReadAsStringAsync().Result; // your logging code here return base.SendAsync(request,cancellationToken); } }
如果您决定选择DelegatingHandler,则需要将该处理程序注册到Global消息处理程序.