一个站点,多个客户端ui

时间:2008-12-03 16:50:56

标签: asp.net-mvc routing

我有一个Asp.net Mvc网站,我想为不同的客户提供单独的访问和用户界面,例如: http://company1.mysite.com
http://company2.mysite.com
http://company3.mysite.com

每个客户端将具有不同的ui但实际上具有相同的功能(或禁用某些功能) 我想为每个客户分离图形,如徽标,CSS和图像。

如何才能实现这一目标?

3 个答案:

答案 0 :(得分:1)

你可以做很多事情。如前所述,第一级是使用不同的CSS文件。您可以通过创建Helper方法动态地放入CSS文件的不同路径。所以它会用到这样的东西:

<link href="<%=AppHelper.GetCSSPath("mysite.css")%>" rel="stylesheet" type="text/css" />

这为您提供了一定程度的自定义。另一个级别实际上会为每个子站点提供不同的视图文件。您可以通过创建新的ViewEngine来执行此操作:

public class SubSiteViewEngine: WebFormViewEngine
{

  private string GetSiteRoot() {
   // some logic to get the site root from the incoming URL
  }

  public SubSiteViewEngine()
  {

    MasterLocationFormats = new[] { 
            GetSiteRoote() + "/Views/{1}/{0}.master", 
            GetSiteRoote() + "/Views/Shared/{0}.master" ,
            GetSiteRoote() + "/Views/Shared/MasterViews/{0}.master" 
        };
    ViewLocationFormats = new[] { 
            GetSiteRoote() + "/Views/{1}/{0}.aspx", 
            GetSiteRoote() + "/Views/{1}/{0}.ascx", 
            GetSiteRoote() + "/Views/Shared/{0}.aspx", 
            GetSiteRoote() + "/Views/Shared/{0}.ascx",
            GetSiteRoote() + "/Views/Shared/Controls/{0}.ascx" 
        };
    PartialViewLocationFormats = ViewLocationFormats;
  }

}

希望有所帮助。

P.S。我将很快为自己的项目做这个,所以我很快就会有一些实际的工作代码。

答案 1 :(得分:1)

另一个选择是使用IIS安排此操作。您必须检查性能影响,但通过这样做,您可以单独控制每个应用程序(或池)。

基本上,您所做的是为系统中的每个租户创建一个不同的网站。使其指向应用程序文件夹中的实际应用程序代码。然后应该使用指向其文件夹的虚拟目录添加变量内容(css,文件库可能?使用你的想象力;-))。

通过使用这种方法,您不会有由于意外错误等导致租户之间数据交叉的风险。

答案 2 :(得分:0)

您必须检查传入的URL并为每个URL提供不同的CSS文件。如果要在公司之间更改图像,可以使用背景图像。

其他建议:

  • 为不同公司保留单独的文件夹(并使用root用于常见事项)
  • 如果您必须禁用某些功能,请不要询问公司名称,而是询问当前“配置文件”中是否允许该名称。

    If Company = A then
       UseFunctionX = true
    else
       UseFunctionX = false
    
    //later in the code
    If UseFunctionX then
        // do domenthing
    

    这样可以更简单地添加更多配置文件