如果需要的话,我想知道如何在控制器构造函数中重定向请求?
例如:在构造函数中,我需要用动态值初始化一个对象,在某些情况下,我不想这样做,在这种情况下,我想重定向到其他地方。同样,构造器的其余部分也不会被执行,也不会执行“原始的后续操作”。
我该怎么做呢?谢谢
编辑#1
最初,我使用:
public override void OnActionExecuting(ActionExecutingContext filterContext)
在那里,我可以重定向到其他一些控制器/action/url,但是稍后,我需要更改我的控制器,在那里我初始化了他的构造函数中的一个变量,并拥有一些真正需要重定向请求的代码:P
我还需要它,因为OnActionExecuting在控制器构造函数之后执行。在我的逻辑中,重定向需要在那里完成。
发布于 2011-01-25 20:28:43
在控制器构造函数内执行重定向不是一种好的做法,因为上下文可能未初始化。标准做法是编写一个自定义操作属性,覆盖OnActionExecuting方法并在内部执行重定向。示例:
public class RedirectingActionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if (someConditionIsMet)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
{
controller = "someOther",
action = "someAction"
}));
}
}
}
然后用这个属性修饰你想要重定向的控制器。要非常小心,不要用这个属性修饰你要重定向到的控制器,否则你会陷入无尽的循环。
因此,您可以:
[RedirectingAction]
public class HomeController : Controller
{
public ActionResult Index()
{
// This action is never going to execute if the
// redirecting condition is met
return View();
}
}
public class SomeOtherController : Controller
{
public ActionResult SomeAction()
{
return View();
}
}
https://stackoverflow.com/questions/4793452
复制相似问题