2012-06-30 12 views
3

平台:ASP.NET 4.0,MVC 4 RC,VS 2012如何实现2个网站的支持与1倍的溶液

更新:我已经回答我的问题,我自己。请参考下面

我想要做什么我的回答后:

我现在有一个网站叫www.a.com其针对特定客户群。我想创建一个名为www.b.com的变体,它针对不同的细分市场。

但是,在后台,a和b的技术和代码对于大多数部分将是相同的,只有一些页面/内容根据用户是否使用域a或b进行浏览而有所不同。对于我来说,为此创建一个新项目是绝对没有意义的。

但是,我并不清楚我应该如何实现www.b.com,它是MVC中的流程。当某人来自www.b.com时,如何呈现不同的主页,会经历许多与www.a.com相同的页面,但根据URL是针对a还是b,呈现出不同的页面。

一些指针,提示,示例非常感谢。

更新:我已经回答了我的问题,我自己。请在下面看到我的答案帖子

回答

0

这里就是我终于做到

首先,感谢那些回答我的帖子,你帮我想通过我能做什么。最后,我所做的只是一系列相当简单的事情。具体方法如下:

  1. 我指着我的新域名www.b.com到我的虚拟主机所以打字www.b.com将指向www.a.com根(CNAME)

  2. 在我的解决方案,我做了以下

我有一个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或将其附加到模型中?

2

如果您依赖域名,那么您将会对硬编码信息进行编码,这些信息可能会发生变化。而不是这样做,根据子域来做。你仍然很难编码一些信息,但子域的方式更灵活,并且在开发中更容易。

从每个域您都可以重定向到正确的子域。

例如

www.a.com # => redirects to site_a.somedomain.com 
www.b.com # => redirects to site_b.somedomain.com 

然后你就可以建立一个网站,依赖于子域(Site_A的或site_b)来确定的布局来呈现。

这样,即使域名更改您的网站仍然有效。

+0

而且重定向对于最终用户是不可见的 - 即他们只能看到www.b.com/someURL而不是site_b.somedomain.com/?最终用户不应该注意www.a.com。从迄今为止的回应看来,没有MVCish的做法......? – jeremy

+1

是的,你可以做到这一点,用户不会注意到重定向。但是如果你不想改变的话,你必须做一些URL重写。我没有看到MVCish的方法。 – Dty

2

我在前段时间在经典ASP中实现了类似于此的解决方案。我所做的是丑了一点,但工作:

  • 我creted一个叫与域名网站(是的,每个站点不止一个),背景,主色调等

  • 添加的表内容表的列站点,站点ID的FK。

  • 创建管理面板来更改此信息。

  • 创建一个在每个请求上运行的函数(在我的情况下,它通过包含文件在每个页面上运行)通过Request.ServerVariables["SERVER_NAME"]获取域名,并查看我的表格。如果找到匹配项,则id将站点配置信息存储在该站点的cookie的cookie中,并使用该值加载会话变量,因此我可以使用它来查询正确的内容并显示“不同的”布局。在下次访问时,它会检查cookie,如果存在,请在会话中加载此信息;如果不是,则从数据库再次加载。

  • 如果该功能找不到匹配项,它将重定向到“正在建设中的页面”。