在Routing - MVC中动态更改默认操作

时间:2015-02-24 09:22:40

标签: asp.net-mvc asp.net-mvc-routing

这就是我设计 RegisterRoutes 功能的方法。并根据条件选择 HomeController 的Action。到目前为止很好。

string env = "Index";
if (some condition from config)
{
    env = "Test";
}
routes.MapRoute(
    "Default",                                             
    "{controller}/{action}/{id}",                           
    new { controller = "Home", action = env, id = "" }  
);

问题从默认情况下重定向到其他控制器时开始如果不指定动作(例如:我正在调用SampleController)“env”(在RegisterRoutes中设置被调用。如果env被设置为“索引” “如果设置了env,则调用索引操作”测试“也会在所有其他控制器中调用测试操作。

我的目的只是为了HomeController这个条件应该设置,对于所有其他控制器我希望Index是默认动作。

我如何使这项工作?是否可以动态更改所有其他控制器的操作?有没有更好的方法可以做到这一点。

分享您的建议

由于

1 个答案:

答案 0 :(得分:2)

我认为你不应该在你的路由引擎中这样做。我会在代码中路由所有内容并从那里调用正确的操作。例如:

public ActionResult Index()
{
    switch(config) 
    {
        case "OtherAction":
            return OtherAction();

        case "AnotherAction":
            return AnotherAction();

        case "Index":
            break;

        default:
            //Er, how did we get here?
            throw new HttpNotFoundException();
    }

    //Normal index action continues here...

}

public ActionResult OtherAction() { ... }
public ActionResult AnotherAction() { ... }