在调用特定控制器方法之前返回MVC ActionResult

时间:2009-03-04 20:40:31

标签: asp.net-mvc

我有一个基本控制器类,我的其他控制器是从中继承的

public abstract class BaseController : Controller
{
    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        base.Initialize(requestContext);
        ...
    }
}

在初始化期间我正在进行一些设置,并且在一些情况下我想要将执行短路,直接跳转到ActionResult的返回,完全跳过实际Action方法的执行。沿着这些方向的东西

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    base.Initialize(requestContext);
    if(specialCase)
    {
        ViewData[...] = specialCaseInformation;
        return View("~/Shared/SpecialCase.aspx");
    }   
}

目的是跳过将要调用的任何ActionResult方法,并将其替换为我的全局特殊案例页面。但我认为Initialize不是为了这个。

我认为我需要做的是创建一个单独的ActionFilterAttribute类,重写OnActionExecuting方法,如果出现了specialCase,则构造一个ViewResult对象并将其分配给filterContext.Result属性。

我是否朝着正确的方向前进,或者我应该以不同的方式做这件事吗?

1 个答案:

答案 0 :(得分:0)

是的,ActionFilterAttribute是正确的方法。查看HandleErrorAttribute.cs以获取示例。

正如你所说,初始化不是正确的方法。