我想要映射这样的路线:
ASP.NET MVC 3应用程序中的mysite.com/username
;我该怎么办呢? 感谢所有人,问候
答案 0 :(得分:2)
也许在最开始时添加自定义路由,它将从System.Web.Routing.Route继承,并覆盖方法
protected virtual bool ProcessConstraint(HttpContextBase httpContext, object constraint,
string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
您将使用索引列检入数据库。
只需添加一些不可为空的约束对象,如
Constraints = new { username = "*" }
以便路由对象处理约束。
在点击数据库之前,可以进行一些启发式判断是否可以是用户名。记住你不能让用户与控制器相同(当有默认动作时),所以你想以某种方式限制它。注意,如果这不会影响年度表现,但是你可能在斜线后没有很多具有单一价值的路线。
这就是你如何做到的。
public class UserRoute : Route
{
public UserRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, IRouteHandler routeHandler)
: base(url, defaults, constraints, routeHandler)
{
}
protected override bool ProcessConstraint(HttpContextBase httpContext, object constraint, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
if (routeDirection == RouteDirection.UrlGeneration)
return true;
object value;
values.TryGetValue(parameterName, out value);
string input = Convert.ToString(value, CultureInfo.InvariantCulture);
// check db
if (!CheckHeuristicIfCanBeUserName(input))
{
return false;
}
// check in db if exists,
// if yes then return true
// if not return false - so that processing of routing goes further
return new[] {"Javad_Amiry", "llapinski"}.Contains(input);
}
private bool CheckHeuristicIfCanBeUserName(string input)
{
return !string.IsNullOrEmpty(input);
}
}
这在开始时添加。
routes.Add(new UserRoute("{username}",
new RouteValueDictionary(){ {"controller", "Home"}, {"action", "About"}},
new RouteValueDictionary(){ { "username", "*" }}, new MvcRouteHandler()));
以两种方式为我工作,产生和接受。
答案 1 :(得分:1)
也许是这样的?
routes.MapRoute(
"Profile",
"{username}",
new { controller = "Profile", action = "View" }
);
你的控制器是
public class ProfileController : Controller {
public ActionResult View(string username) {
// ...
}
}