加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在ActionFilter中获取Request Body

发布时间:2020-12-15 08:45:58 所属栏目:百科 来源:网络整理
导读:出于日志记录的目的,我试图监视通过WebAPI发出的请求.我已创建并且我正在寻找一种方法,在请求完成并回复后,在请求中返回已发送的正文.我试图通过使用ActionFilter来做到这一点,但迄今为止从请求中读取正文失败了. 任何人都可以提供一些建议我如何获取这些信
出于日志记录的目的,我试图监视通过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消息处理程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读