MVC路由配置:具有混合段和默认值的URL模式

时间:2013-09-23 13:28:18

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我在MVC示例项目下有以下路由配置:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute("", "X{controller}/{action}",
            new { controller = "Customer", action = "List" });

        routes.MapRoute("MyRoute", "{controller}/{action}",
            new { controller = "Home", action = "Index" });
    }
}

我将所有控制器(Home,Customer)重定向到显示当前控制器和操作名称的同一视图。

因此,对于URL http://localhost:5O44O/XCustomer,我有以下输出:

  

控制器是:客户
  行动是:列表

我希望对于网址http://localhost:5O44O/X我应该有相同的输出......但事实并非如此......

  '/'应用程序中的服务器错误。      

无法找到资源   描述:HTTP 404.资源你   正在寻找(或其中一个依赖)可能已被删除,   更改名称,或暂时不可用。请查阅   以下URL并确保拼写正确。

     

请求的网址:/ X

为什么?我首先放置了“X”条件,所以我应该获得Customer和List的默认替换?!

1 个答案:

答案 0 :(得分:3)

您正在接收404 error,因为您没有XController。如果你有,你会收到路线:http://localhost:5O44O/XX

routes.MapRoute("", "X{controller}/{action}" - 这只是生成一系列路线的一种语法。而且它没有你所期望的行为。

所有操作都应该在这里完成:

new { controller = "Customer", action = "List" });

如果您想拥有这样的路线:http://localhost:5O44O/X/List,您需要按如下方式编写MapRoute:

routes.MapRoute("name", "X/{action}",
            new { controller = "Customer", action = "List" });

你甚至可以写:

routes.MapRoute("name", "HelloBro",
                new { controller = "Customer", action = "List" });

它将为http://localhost:5O44O/HelloBro List action

Customer controller返回路线{{1}}