【问题标题】:Changing Default Action dynamically in Routing - MVC在路由中动态更改默认操作 - MVC
【发布时间】:2015-02-24 09:22:40
【问题描述】:

这就是我设计 RegisterRoutes 功能的方式。并根据条件选择 HomeController 的操作。到目前为止一切顺利。

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 设置为“Index " 如果设置了 env,则会调用索引操作 "Test" 在所有其他控制器中也会调用测试操作。

我的意图是只为 HomeController 设置此条件,对于所有其他控制器,我希望 Index 成为默认操作。

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

分享你的建议

谢谢

【问题讨论】:

  • 您可以为"Home/{action}/{id}", new { controller = "Home", action = env } 和默认路由"{controller}/{action}/{id}", new { controller = "Home", action = "Index" } 创建一个特定路由
  • @StephenMuecke 谢谢!我试过了,但总是调用默认路由?
  • 你把"Home/{action}/{id}"放在第一位了吗? (顺序很重要)

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


【解决方案1】:

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

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() { ... }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2011-02-01
    相关资源
    最近更新 更多