ASP.Net MVC 4使用Attribute还是BaseController?

Ian*_*ink 6 c# asp.net asp.net-mvc attributes asp.net-mvc-4

我有一个控制器有几个动作.如果服务上的IsCat字段为false,则应重定向Action :

所以这样的事情:

    public ActionResult MyCatAction()
    {
        if (MyService.IsCat==false)
            return RedirectToAnotherControllerAction();
     ...
Run Code Online (Sandbox Code Playgroud)

这可以在属性中完成并应用于整个Controller的一组操作吗?

Len*_*rri 5

在这种情况下,动作过滤器是这样的:

动作过滤器,用于包装动作方法的执行.此过滤器可以执行其他处理,例如向操作方法提供额外数据,检查返回值或取消操作方法的执行.

这是一个很好的MSDN如何:如何:创建自定义操作筛选器

在你的情况下,你会有这样的事情:

public class RedirectFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (MyService.IsCat==false)
            return RedirectToAnotherControllerAction();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您将在控制器级别应用此过滤器(适用于所有控制器操作)

[RedirectFilterAttribute]
public class MyController : Controller
{
   // Will apply the filter to all actions inside this controller.

    public ActionResult MyCatAction()
    {

    }    
}
Run Code Online (Sandbox Code Playgroud)

或按行动:

[RedirectFilterAttribute]
public ActionResult MyCatAction()
{
     // Action logic
     ...
}    
Run Code Online (Sandbox Code Playgroud)