我想你已经错过了路由点。它几乎可以做任何你想要的。 你告诉它在哪里映射。看看下面的路线的例子:
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}
模式来进行路由。从数据的角度来看,它完全可以满足你的需求。
或者对于一个路由类访问模型来说可能就好了? – boblapointe 2013-03-27 15:41:23