从一个Action过滤器属性重定向到另一个

时间:2013-12-02 10:33:53

标签: asp.net-mvc-4 actionfilterattribute

我的MVC应用程序中有两个动作过滤器属性,我在OnActionExecuting事件中做了一些工作。并且根据第一个中的某个条件,我需要执行与第二个相同的代码块。所以我想重用代码。

我的第一个问题,我可以这样做吗?然后如何。

第二,这是一个好方法吗?

更新:

public class Primary : ActionFilterAttribute{
   public override void OnActionExecuting(ActionExecutingContext filterContext){
      if(there is no cookie){
          // Code
      }
      else{
          // Execute the same code block as Secondary OnActionExecuting
      }
   }
}

public class Secondary : ActionFilterAttribute{
   public override void OnActionExecuting(ActionExecutingContext filterContext){
       // Access cookie and do other work
   }
}

[Primary]
public ActionResult MyPrimaryAction(Guid id){
    // Do work
}

[Secondary]
public ActionResult MySecondaryAction(Guid id){
    // Do work
}

感谢。

1 个答案:

答案 0 :(得分:0)

您可以创建基类:

public class BaseCookieAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext){
       // Access cookie and do other work
   }
}

然后更新两个属性类:

public class Primary : BaseCookieAttribute {
   public override void OnActionExecuting(ActionExecutingContext filterContext){
      if(there is no cookie){
          // Code
      }
      else{
          base.OnActionExecuting(filterContext);
      }
   }
}

然后您不需要辅助属性,因为您可以直接在操作方法上使用BaseCookieAttribute