微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 在ActionFilter中获取Request Body

出于日志记录的目的,我试图监视通过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消息处理程序.

原文地址:https://www.jb51.cc/csharp/244784.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐