将控制器重定向到另一个控制器

时间:2015-01-29 17:12:30

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

比如说,当用户输入网址 / ControllerA / {Any Action name}时,我有 ControllerA ,其中包含 10个操作 它应该重定向到 / ControllerB / Index

是否有一种简单的方法可以将 ControllerA 中的所有操作重定向到 ControllerB ,而无需在 RedirectToAction > ControllerA

2 个答案:

答案 0 :(得分:0)

问题不是很清楚 -

我可以看到三种不同的场景(可能更多?) 1.你真的需要在做任何事情之前重新定位所有这些行动(为什么他们甚至在那里?), 2.您希望它们执行然后转到ControllerB。 3.您是否只想直接为所有这10个网址调用ControllerB?

对于方案一,您可以在controllerA(甚至在controllerB上)使用属性路由,并使用一个重定向到索引的方法。 对于方案2,您要覆盖OnActionExecuted 对于方案三,您希望将属性路由直接放在Index上,并指向那里的所有路径。

编辑:

你可以在路由中做一些短路控制器A.

if (configurationCondition)
{
    routes.MapRoute("Hijaack",
        url: "controllerA/{*theRest}",
        defaults: new { controller = "controllerB", action = "Index" });
}

这比要求操作与controllerA上的操作完全匹配更松散。它完全避免了重定向,这对最终用户来说应该是更好的体验。

可以通过属性路由将其收紧到更具体的路线。

答案 1 :(得分:0)

还有一些其他方法可以在不影响ControllerA的情况下做到这一点,这更适合:

  • 使用过滤器,当您看到用户要求此控制器时,您将向第二个控制器返回重定向响应

  • 使用路由规则

两者都可以通过处理您的Web配置设置来实现。