これはコントローラーで 1 つのアクションだけで実行できますが、すべてのリクエストを同じアクションにルーティングすることになる o/w のルート制約が必要です。以下にサンプルを示します。
このルートを一番上に置きます:
routes.MapRoute(
"RedirectSiteRoute",
"{site}",
new { controller = "SiteRouter", action = "Route" },
new { site = new SiteRouteConstraint() }
)
ルート制約は次のようになります。
public class SiteRouteConstraint : IRouteConstraint {
public bool Match(System.Web.HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) {
string[] allowedSites = new[] { "site1", "site2", "site3" };
return
allowedSites.Any(x => x == values[parameterName].ToString());
}
}
許可サイト用にダミーのロジックを用意しましたが、そのデータを取得する方法はあなた次第です。
コントローラーのアクション:
public class SiteRouterController : Controller {
public ActionResult Route(string site) {
return Redirect(string.Format("www.{0}.com", site));
}
}
あなたがアイデアを得たことを願っています。