这里就是我终于做到
首先,感谢那些回答我的帖子,你帮我想通过我能做什么。最后,我所做的只是一系列相当简单的事情。具体方法如下:
我指着我的新域名www.b.com到我的虚拟主机所以打字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,以及一些输出更改,这很好。但我一直在寻找更干净的方式。对于例如有什么方法可以在视图中访问IsPageB变量而不使用ViewBag或将其附加到模型中?
而且重定向对于最终用户是不可见的 - 即他们只能看到www.b.com/someURL而不是site_b.somedomain.com/?最终用户不应该注意www.a.com。从迄今为止的回应看来,没有MVCish的做法......? – jeremy
是的,你可以做到这一点,用户不会注意到重定向。但是如果你不想改变的话,你必须做一些URL重写。我没有看到MVCish的方法。 – Dty