【问题标题】:Can one get parameter values used in a method from within an ActionFilter?可以从 ActionFilter 中获取方法中使用的参数值吗?
【发布时间】:2010-12-23 02:56:43
【问题描述】:

假设我有一个这样的控制器方法:

[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 的值吗?

【问题讨论】:

    标签: c# parameters action-filter


    【解决方案1】:

    您可以使用ActionExecutingContext.ActionParameters 属性获取OnActionExecuting 中的参数值。

    例如,以下测试属性将参数名称和值写入响应(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);
    }
    

    【讨论】:

    • 这仅适用于 MVC 路由中设置的参数,对吗?任意 URL 参数不通过?
    • @Mir ...这是真的。但是您可以在 ActionContext 的 Request 对象部分中获取所有信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多