首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MVC -构造函数内的重定向

MVC -构造函数内的重定向
EN

Stack Overflow用户
提问于 2011-01-25 20:25:46
回答 1查看 16K关注 0票数 23

如果需要的话,我想知道如何在控制器构造函数中重定向请求?

例如:在构造函数中,我需要用动态值初始化一个对象,在某些情况下,我不想这样做,在这种情况下,我想重定向到其他地方。同样,构造器的其余部分也不会被执行,也不会执行“原始的后续操作”。

我该怎么做呢?谢谢

编辑#1

最初,我使用:

代码语言:javascript
复制
  public override void OnActionExecuting(ActionExecutingContext filterContext) 

在那里,我可以重定向到其他一些控制器/action/url,但是稍后,我需要更改我的控制器,在那里我初始化了他的构造函数中的一个变量,并拥有一些真正需要重定向请求的代码:P

我还需要它,因为OnActionExecuting在控制器构造函数之后执行。在我的逻辑中,重定向需要在那里完成。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-25 20:28:43

在控制器构造函数内执行重定向不是一种好的做法,因为上下文可能未初始化。标准做法是编写一个自定义操作属性,覆盖OnActionExecuting方法并在内部执行重定向。示例:

代码语言:javascript
复制
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"
            }));
        }
    }
}

然后用这个属性修饰你想要重定向的控制器。要非常小心,不要用这个属性修饰你要重定向到的控制器,否则你会陷入无尽的循环。

因此,您可以:

代码语言:javascript
复制
[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();
    }
}
票数 57
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4793452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档