在 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
}
}
我正在尝试找出如何在我的 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
}
}