ASP.NET MVC Url路由问题

时间:2011-03-10 18:50:49

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

我是MVC和URL路由的新手,我正在寻找一些指导。

我希望能够为每个用户提供一个URL,格式为: http://www.example.com/username

所以我添加了以下路线:

routes.MapRoute(
    "UserRoute", // Route name
    "{username}", // URL
    new { controller = "Users", action = "ViewUser", username = UrlParameter.Optional }
);

如果它是FIRST路线,那么效果很好,但它已经弄乱了默认的{controller}/{action}/{id}路线。现在,当我尝试访问根页面时,它尝试使用null参数(或使用“favicon.ico”作为参数)加载我的UsersController“ViewUser”操作。

如果我将新路由放在默认路由之后,那么MVC会尝试找到名为username的控制器,但由于无法找到它而失败。

有没有办法获得{username}形式的网址而不会破坏常规路由系统?我可能会为每个控制器编写一个自定义路由,但这似乎容易出错。

2 个答案:

答案 0 :(得分:1)

您可以为默认路由的允许控制器值设置约束,而不是为每个控制器创建路由。

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL
    new { controller = "controller1", action = "defaultaction", id = UrlParameter.Optional }, //default values
    new { controller = @"controller1|controller2|controller3|..." }
);

当控制器不匹配时,它将尝试下一个路径

答案 1 :(得分:1)

您可以查看this link并查看是否有帮助。它还创建了只有用户名的网址。