ルートの順序が重要です。したがって、使用可能なすべてのコントローラーを処理する最初のルート定義を作成してから、残りの要求を処理するルート定義について言及します。そこであなたはその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
アクションメソッドにパラメーター値を読み取らせ、データベースからデータを取得します。
public ActionResult Profile(string url)
{
//url variable will have apple or microsoft . You may get data from db and return a view now.
}
したがって、リクエストが来るたびに、それが利用可能なコントローラー(最初のルート定義でFromValuesListContraintクラスコンストラクターに渡したもの)であるかどうかをチェックし、利用可能な場合はそのルーティングに進み、そうでない場合は一般的な(デフォルト)2番目のルートとして言及されているルート。
この例では、Home、Account、およびOtherOnesが使用可能なコントローラーです。プロジェクトに新しいコントローラーを追加するときはいつでも、それをFromValuesListConstraintクラスコンストラクターのコンストラクターに追加する必要があります。
特定の例外をキャッチし、いずれもキャッチされない場合は一般的な例外に進むように機能すると言うだけです。:)(理解するための単なる例)