【问题标题】:MVC Advanced RoutingMVC 高级路由
【发布时间】:2010-12-23 11:36:37
【问题描述】:

我正在尝试路由一个没有静态操作的 URL,即用户可以创建可以由任何字符串表示的系统。我想要一个如下所示的 URL:

http://yousite.com/System/WIN1234/Configure

默认情况下,路由机制认为 WIN1234 是动作,而我希望能够捕获 WIN1234 并决定抛出哪个方法。如:

public void RouteSystemRequest(string system, string action)
{

  switch (action)
  {

    case "Configure":

        ConfigureSystem(string system);
        break;

  }

}

我怎样才能做到这一点?这是合乎逻辑的还是我认为这一切都错了?

【问题讨论】:

    标签: url routing url-routing


    【解决方案1】:

    你需要做的都是可能的。您需要设置一个指向 System Action 的默认路由,并且您需要接受其他值作为 Action 的参数。

        //General
        routes.MapRoute(
            "Default7",                                              // Route name
            "{action}/{param1}/{param2}",                           // URL with parameters
            new { controller = "Home", action = "Index", param1 = "", param2 = "" }  // Parameter defaults
        );
    

    在您的代码中,您将获得默认值 Win1234 和 Configure。

    然后您可以实现您的切换逻辑并使用 RedirectToAction 移动到您想要的操作。

    【讨论】:

    • 我设置了您发布的代码,将控制器从 Home 更改为 Systems。我希望路由去 SystemsController.Index(string id, string system) id = param1, system = param2 我得到一个资源找不到错误。我做错了什么?
    • 这条路线必须是您序列中的第一个。此外,您设置的控制器必须具有名为 param1 或 param2 的参数。不是系统和 ID。
    • 我希望整个路由结构保持不变,但系统控制器除外。有没有办法对路由施加约束,说只有当控制器是 System.RouteSystemRequest(string systemName, string action) 时才路由到 RouteSystemRequest(string systemName, string action)。即 Account/Setup 仍将遵循默认控制器 =“Account”和 action =“Setup”,但 System/WIN1234/Configure 将路由到 RouteToSystem(string systemName, string action) 谢谢!乔治
    • 是的,确实可以设置将请求发送到任何控制器/动作的路由。您可以在路由代码中插入多个(每个路由一个条目),因此您只需要为您的系统路由创建另一个 Maproute 条目。设置它有什么问题? (如果您觉得我的回答有帮助,我将不胜感激)
    猜你喜欢
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2011-09-02
    • 2018-06-26
    • 1970-01-01
    相关资源
    最近更新 更多