将方法的参数转换为自定义动作过滤器MVC3 asp

时间:2013-09-12 05:26:02

标签: c# asp.net-mvc-3 custom-attributes action-filter

我一直在研究一个应用程序,每次你注册,修改,取消,删除等......某些事情,通知必须发送给用户(如果配置)所以我打算做这可以通过在数据库中保存proccess的唯一标识符,然后检查通知是否配置了id,proccess和唯一标识符,然后发送通知。

要做到这一点,我想到了这一点......在控制器上

   [NotificationFilter(id=10,proccess="Excecution") ]
   public Register(Entity entity,Guid uid){

   }

这在ActionFilter类

public class NotificationFilter : ActionFilterAttribute
{
    public int id{ get; set; }
    public string proccess{ get; set; }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {

         dosomething(id,name,uid)
    }
}

但我想知道是否有办法将注册操作的uid参数添加到 OnActionExecuted 方法中。

2 个答案:

答案 0 :(得分:5)

以Neel Bhatt的回答......我做了这样的事情来完成这项工作。

public class NotificationFilter : ActionFilterAttribute
{
    public int _id;
    public string _proccess;
    public Guid _uid; 

    public NotificationFilter(int id,string proccess)
    {
        _id= id;
        _proccess = proccess;
    }
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
         var val = filterContext.ActionParameters["uid"];

        _uid = (Guid)val;
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
         var uid = _uid;

         dosomething(id,name,uid)
    }
}

这对我有用,希望对其他人有帮助。

答案 1 :(得分:1)

public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
 var model = filterContext.ActionParameters.SingleOrDefault(ap => ap.Key == "uid").Value;


       if (model != null)
       {
          dosomething(id, name, uid)
       }
}