.net core 如何在操作筛选器的OnActionExecuted中获取请求参数

.net core 如何在操作筛选器的OnActionExecuted中获取请求参数,.net-core,parameters,request,action-filter,onactionexecuted,.net Core,Parameters,Request,Action Filter,Onactionexecuted,作为标题,是否可以获取请求参数 我试图从请求体获取它,但失败了,任务。结果为零。请求主体似乎是空的 任何人都可以帮助我,我将不胜感激 代码如下: public class LogFilter : Attribute, IActionFilter { private ILogger<LogFilter> _logger; private ITestAService _service; public LogFilter(ILogger<LogFi

作为标题,是否可以获取请求参数

我试图从请求体获取它,但失败了,任务。结果为零。请求主体似乎是空的

任何人都可以帮助我,我将不胜感激

代码如下:

public class LogFilter : Attribute, IActionFilter  
{
     private ILogger<LogFilter> _logger;
     private ITestAService _service;

     public LogFilter(ILogger<LogFilter> logger, ITestAService service)
     {
          _logger = logger;
          _service = service;
     }

     public void OnActionExecuted(ActionExecutedContext context)
     {
         var content = new StringBuilder();
         using (Stream sm = context.HttpContext.Request.Body)
         {
            int count = 0;
            byte[] buffer = new byte[1024];
            StringBuilder builder = new StringBuilder();
            var task = sm.ReadAsync(buffer, 0, 1024);
            if (task.Result > 0)
            {
                content.Append(Encoding.UTF8.GetString(buffer, 0, count));
            }
         }
     }
}
公共类日志过滤器:属性,IActionFilter
{
私人ILogger_记录器;
私人资讯科技服务(it);;
公共日志过滤器(ILogger记录器,ITestAService)
{
_记录器=记录器;
_服务=服务;
}
public void OnActionExecuted(ActionExecutedContext上下文)
{
var content=新的StringBuilder();
使用(Stream sm=context.HttpContext.Request.Body)
{
整数计数=0;
字节[]缓冲区=新字节[1024];
StringBuilder=新的StringBuilder();
var task=sm.ReadAsync(缓冲区,0,1024);
如果(task.Result>0)
{
Append(Encoding.UTF8.GetString(buffer,0,count));
}
}
}
}

请求主体在OnActionExecuted中已被使用且不可用,我是这样做的

读取请求正文并将其存储在HTTPContext中

public void OnActionExecuting(ActionExecutingContext context)
{
        try
        {
            var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;

            if (controllerActionDescriptor != null)
            {
                    var requestBody = FormatRequestBody(context.ActionArguments);
                    context.HttpContext.Items["LogRequestBody"] = requestBody;
            }
        }
        catch (Exception ex)
        {
            _logger.Error("Error in LogServiceCallFilter", ex);
        }
}


public string FormatRequestBody(IDictionary<string, object> actionArguments)
{
        try
        {

            if (actionArguments != null)
                return $"{JsonConvert.SerializeObject(actionArguments)}";
        }
        catch (Exception ex)
        {
            _logger.Error("Error in LogServiceCallFilter", ex);
        }
        return "";
}
public void OnActionExecuted(ActionExecutedContext context)
{
        try
        {
            var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;

            if (controllerActionDescriptor != null)
            {
                    var actionName = context.ActionDescriptor.RouteValues["controller"] + "/" + context.ActionDescriptor.RouteValues["action"];
                    var requestBody = context.HttpContext.Items["LogRequestBody"] != null ? context.HttpContext.Items["LogRequestBody"].ToString() : "";
                    context.HttpContext.Items.Remove("LogRequestBody");
            }
        }
        catch (Exception ex)
        {
            _logger.Error("Error in LogServiceCallFilter", ex);
        }

}