我是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}
形式的网址而不会破坏常规路由系统?我可能会为每个控制器编写一个自定义路由,但这似乎容易出错。
答案 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并查看是否有帮助。它还创建了只有用户名的网址。