c# - 能否从 ActionFilter 中获取方法中使用的参数值?

标签 c# parameters action-filter

假设我有一个这样的 Controller 方法:

[Audit]
public JsonNetResult List(int start, int limit, string sort, string dir, string searchValue, SecurityInputModel securityData)
{
    ...
}

和这样定义的属性:

[AttributeUsage(AttributeTargets.Method)]
public class AuditAttribute : ActionFilterAttribute
{

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        // auditing code here

        base.OnActionExecuted(filterContext);

    } 
}

我可以从 OnActionExecuted() 内部获取 start/limit/sort/etc 的值吗?

最佳答案

您可以使用 ActionExecutingContext.ActionParametersOnActionExecuting 中获取参数值属性(property)。

例如,以下测试属性将参数名称和值写入响应(ItemModel 类覆盖 ToString 以仅输出其 2 个属性):

public class CustomActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var response = filterContext.HttpContext.Response;

        response.Write(filterContext.ActionDescriptor.ActionName);
        response.Write("<br/>");

        foreach (var parameter in filterContext.ActionParameters)
        {
            response.Write(string.Format("{0}: {1}", parameter.Key, parameter.Value));
        }
    }
}

[CustomActionFilter]
[HttpPost]
public ViewResult Test(ItemModel model)
{
    return View(model);
}

alt text

关于c# - 能否从 ActionFilter 中获取方法中使用的参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4515541/

相关文章:

c# - 为什么重定向标准输入会导致 stdout 不打印到新的控制台进程?

c# - ServiceStack - 强制为某些类生成 Typescript 类型

c# - WPF Datagrid 排序索引问题

c++ - 使用 typename 参数时,模板参数推导/替换失败

jquery - 使用 jQuery 在 ajax 调用期间将参数附加到 url

c# - 在单声道中使用 c# 驱动程序比较 mongo 集合的两个字段

delphi - 如何在参数化查询中使用 IS NULL (Delphi)

ASP.NET MVC : Action Filter to set up controller variables?

asp.net-mvc - ControllerContext 为 null 并且在使用 Html.Action 时未调用 BaseController.OnActionExecuting()

asp.net - 将变量从 Web API Controller 方法传递到过滤器