您的路线顺序很重要。因此,创建一个处理所有可用控制器的第一个路由定义,然后提及一个将处理其余请求的路由定义。在那里你将处理www.yousite.com/apple
那种请求
routes.MapRoute("Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" },
new { controller = new FromValuesListConstraint("Home", "Account","OtherOne") }
);
// to handle personalize user url
routes.MapRoute("user","{url}", new {controller="Home",action="Profile",url = "" });
现在创建一个FromValuesListContraint
继承自 IRouteConstraint的新类
public class FromValuesListConstraint : IRouteConstraint
{
private string[] _values;
public FromValuesListConstraint(params string[] values)
{
this._values = values;
}
public bool Match(HttpContextBase httpContext, Route route, string parameterName,
RouteValueDictionary values, RouteDirection routeDirection)
{
// Get the value called "parameterName" from the
// RouteValueDictionary called "value"
string value = values[parameterName].ToString();
// Return true is the list of allowed values contains
// this value.
for (int i = 0; i < _values.Length; i++)
if (SContains(_values[i], value, StringComparison.OrdinalIgnoreCase ))
return true;
return false;
}
public bool SContains(string source, string toCheck, StringComparison comp)
{
return source.IndexOf(toCheck, comp) >= 0;
}
}
让Profile
Home 中的操作方法读取参数值并从数据库中获取数据。
public ActionResult Profile(string url)
{
//url variable will have apple or microsoft . You may get data from db and return a view now.
}
因此,每当请求到来时,它将检查它是否是可用的控制器(您在第一个路由定义中传递给 FromValuesListContraint 类构造函数),如果可用,那么它将用于该路由,否则,它将用于一般(默认)路线作为第二条路线提及。
在这个例子中,Home、Account 和 OtherOnes 是我可用的控制器。每当您向项目添加新控制器时,您都希望将其添加到 FromValuesListConstraint 类构造函数的构造函数中。
简单地说它就像捕获一些特定异常并在没有捕获到一般异常时进入一般异常!:)(只是一个理解的例子)