很抱歉问了一个相当 n00b 的问题,我对 ASP.NET MVC 很陌生。我的问题如下:
我希望我的网站以下列方式处理 URL:
www.mysite.com/homepage/name
我希望上面的链接转到该用户的个人资料。为简单起见,控制器将是具有测试操作的主页控制器。
这意味着 global.asax 路由将是:
routes.MapRoute(
"test",
"homepage/{name}",
new { controller = "Homepage", action = "Test" }
);
到目前为止,代码运行良好(我已经对其进行了测试,并且路由正常)。
但现在我想要启用的其他功能是:
www.mysite.com/homepage/action/id
工作也是如此。
路由将是:
routes.MapRoute(
"Default",
"homepage/{action}/{id}",
new { controller = "Homepage", action = "Index", id = UrlParameter.Optional }
);
问题是当用户想要省略动作的 {id} 时会发生什么,路由表检测到动作名称实际上是 {name} 参数。
有没有办法先检查一个动作是否存在。并且只有在没有的情况下,才将其用作不同路线的参数。
说得通?如果没有,我会添加更多细节。
谢谢!
编辑
所以我设法使用约束正则表达式解决了这个问题,我放置了一个正则表达式,定义了我的控制器中的所有操作:
routes.MapRoute(
"homepage",
"homepage/{action}/{id}",
new { controller = "Homepage", action = "Index", id = UrlParameter.Optional },
new { action = "(action1|action2|action3)" }
);
然后是下一条规则:
routes.MapRoute(
"feed",
"homepage/{id}",
new { controller = "Homepage", action = "Test"}
);
我工作正常,只是很难扩大规模。您需要记住将控制器上的每个新操作都放在此处的字符串中。这是调试噩梦的一个巨大开口。
谢谢 !