MVC2:拦截ViewRequest和改变ActionResult的最佳方式

时间:2010-03-19 06:13:35

标签: c# asp.net asp.net-mvc-2

我正在构建一个ASP.NET MVC2 Web应用程序,它需要一些使用开箱即用的表单身份验证无法实现的复杂身份验证和业务逻辑。

我是MVC的新手,所以请耐心等待......

我的计划是使用一个或多个自定义属性(包含其他数据)标记所有受限制的View方法。

然后,控制器将覆盖OnActionExecuting方法以拦截请求,分析目标视图的属性,并执行各种不同的操作,包括将用户重新路由到不同的位置。

我有拦截和属性分析工作,但重定向没有按预期工作。

我尝试将ActionExecutingContext.Result设置为null,甚至尝试通过反射调整控制器并调用其操作方法。没有骰子。

我能够以这种方式实现它......

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
     filterContext.HttpContext.Response.Redirect("/MyView", false);
     base.OnActionExecuting(filterContext);
}

这看起来像是一个黑客,必须有一个更好的方法......

1 个答案:

答案 0 :(得分:2)

首先,请看史蒂夫桑德森的Pro ASP.Net MVC书。关于actionfilters和控制器生命周期的部分对你很重要,主要是b / c对“常规”动作过滤器无法获得的授权过滤器有一些特殊处理。

其次,你应该能够做到这一点:

filterContext.Result = new RedirectToRouteResult(/*params*/);

获得你想要的效果。