在默认路由之前插入这个
routes.MapRoute("Users", "{userID}", new { controller = "Users", action = "GetUser", userID=UrlParameter.Optional });
然后方法 GetUser 必须有一个名为的参数userID
,以便路由处理程序能够正确路由。
更新 :
public class UsernameUrlConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values,
RouteDirection routeDirection)
{
if (values[parameterName] != null)
{
// check if user exists in DB
// if it does, return true
}
return false;
}
}
在您的路线中:
routes.MapRoute("Users",
"{userID}",
new { controller = "Users", action = "GetUser" },
new {IsUser=new UsernameUrlConstraint()}
);
请注意,这每次都会命中数据库,因此在您存储用户名及其是否存在的地方实现一些内存缓存(memcached 或 .net 内存缓存)可能是个好主意,这样您就可以防止不只有来自存在但不存在的用户的用户的 db 命中。例如,如果有人决定访问用户 X 1000 次,那么您将只使用缓存版本而不是进行 1000 次数据库调用。