リクエストが UserId または UserName で渡されているかどうかを判断するには、入力パラメーターが int か文字列かを判断する必要があります。これには 2 つのオプションがあります。
- アクションメソッドで判断する
- ルーティングで決定します。
アクション メソッドで判断を下せば、これらの両方のケースを 1 つのルートで処理できます。これを処理するには、次のようにルートを設定します。
routes.MapRoute("", "User/{userSpecifier}",
new { controller = "Home", action = "Index" });
次に、Home コントローラーの Index アクション メソッドで、次のコードを使用して、入力パラメーターが int か文字列かを確認する必要があります。
public ActionResult Index(string userSpecifier)
{
int userId = 0;
if(int.TryParse(userSpecifier, out userId))
{
//It is an int, and userId contains the user Id, so process accordingly
}
else
{
//It is not an int, so treat userSpecifier as username and process accordingly
}
....
return View();
}
そのため、「userSpecifier」入力パラメーターに渡された文字列を int に変換できる場合は、それが UserId であると想定して、それに応じて処理できます。int に変換できない場合は、それが UserName であると想定し、それに応じて対応できます。
もちろん、このソリューションは、UserId が int で UserName が文字列であるという前提に基づいています。これは、ほとんどのアプリケーションが設定される方法です。
代わりにルーティングでこの決定を行いたい場合は、2 つのルートを設定し、ルート制約を使用して 1 つのルートを制約して整数の入力パラメーターを処理し、2 つ目のルートを制約して文字列の入力パラメーターを処理する必要があります。 .