Rya*_*ule 1 parameters request action-filter onactionexecuted .net-core
如标题,是否可以获取请求参数?
我尝试从请求正文中获取它,但失败了,task.Result为零。看来请求正文是空的。
任何人都可以帮助我,我将不胜感激。
代码如下:
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));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
请求正文已被消耗并且在 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 "";
}
Run Code Online (Sandbox Code Playgroud)
读取已存储在 HttpContext 中的请求正文
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3439 次 |
| 最近记录: |