在 MVC 中实现公共重定向代码

Implementing Common Redirect Code in MVC

我正在尝试找出如何在我的 MVC 控制器操作中重新使用一些代码。如果设置了某物的状态,我想重定向到另一个页面。我已经编写了一个方法来执行此操作,但似乎我必须将其粘贴到每个控制器操作中,例如

[HttpGet]        
public virtual ActionResult DoThis(Guid id)

    ActionResult result;
    if (checkRedirect(out result))
    {
            return result;
    }

   //otherwise continue

我想我可以使用动作过滤器来做到这一点,但后来我必须在过滤器中设置 属性 注入以检查我想要避免的状态。必须有一种我缺少的通用方法...?

方式一:

创建一个基本控制器并从中继承其他控制器:

public class DefaultController : Controller
{
   protected override void OnActionExecuting(ActionExecutingContext filterContext)
   {
       ActionResult result;
       if (checkRedirect(out result))        
       {
           filterContext.Result = result; // redirect
       }

    }
}

并在您的控制器中:

public class SomeController : DefaultController
{
  [HttpGet]        
  public virtual ActionResult DoThis(Gud)
  {
     // do something here which you were putting in else part
  }
}

方式二:

或创建动作过滤器属性:

public class MyCustomAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

       ActionResult result;
       if (checkRedirect(out result))        
       {
           filterContext.Result = result; // redirect
       }

    }

}

并将其付诸行动:

 public class SomeController : Controller
 {
  [HttpGet]
  [MyCustom]        
  public virtual ActionResult DoThis(Gud)
  {
      // do something here which you were putting in else part
  }
}