.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);
}
}