これが私が最終的にやったことです
まず、私の投稿に回答してくださった方々のおかげで、私に何ができるかを考えさせていただきました。結局、私がやったことはかなり単純な一連のことでした。方法は次のとおりです。
新しいドメイン www.b.com を自分の Web ホストに向けたので、www.b.com と入力すると www.a.com (CNAME) のルートがポイントされます。
私のソリューションでは、次のことを行いました
すべてのコントローラーが派生する BaseController があり、そこで IsPageB を宣言しました
public class BaseController : Controller
{
//
// GET: /Base/
...
protected bool IsPageB = false;
....
}
BaseController では、ホストに応じて値を設定します
protected override void OnActionExecuting(ActionExecutingContext ctx)
{
...
IsPageB = Request.Url.Host.Contains("b.com");
...
}
したがって、各コントローラーで IsPageB を確認します
たとえば、ホームページでは、この変数に応じてビューを切り替えただけです
public ActionResult Index()
{
if (IsPageB)
return View("B_Home");
return View();
}
ビュー内では、コントローラーに設定した ViewBag.IsPageB を使用するか、ビューを生成するコントローラーがない場合は、単純にローカル変数を設定します。
@{
bool isPageB = Request.Url.Host.Contains("b.com");
}
そして、この値に基づいてマークアップを生成します。
おそらくこれを行うためのより賢い方法がありますが、基礎となるコードの 90% が a または b で同じであり、いくつかの出力が変更されるという私の目的では、これで問題ありません。しかし、私は常によりクリーンな方法を探しています。たとえば、ViewBag を使用したり、モデルにアタッチしたりせずに、ビューで IsPageB 変数にアクセスできる方法はありますか?