我认为您错过了路由的要点。它几乎可以做任何你想做的事情。 你告诉它映射到哪里。以如下路线为例:
routes.MapRoute(
"Default",
"{something}",
new { controller="MyDefault", action="Something", something=""});
因此,使用 url http://mydomain.com/miles-davis1234/ 它将匹配路由中指定的控制器和操作。在以下操作中,您可以使用 {something} 令牌的值:
public ActionResult Something(string something)
{
// something = miles-davis1234
var x = this._myService.WorkOutWhatSomethingIs(something);
// now do something with x
}
因此,在回答您关于“检测它是用户名还是标签”的问题时,您可以执行上述操作。虽然我不会推荐它。我会做以下事情:
routes.MapRoute(
"Users",
"User/{username}",
new { controller="User", action="Detail", username="" });
routes.MapRoute(
"Tags",
"Tag/{tag}",
new { controller="Tag", action="Search", tag="" });
因为如果您尝试使用相同的路由/令牌来处理标签和用户名,例如,当某人的用户名与标签相同时会发生什么?你无法区分。无论如何,MVC 模式的重点是“RESTful”网址。应该表示控制器(模型)、动作和任何其他元数据。在您的实例中,您甚至可以(并且可能应该)使用基本的{controller}/{action}/{data} 模式进行路由。从数据的角度来看,它完全可以满足您的需求。