【问题标题】:One site, multiple clients ui一个站点,多个客户端用户界面
【发布时间】:2008-12-03 16:50:56
【问题描述】:

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

每个客户端都有不同的用户界面,但功能几乎相同(或禁用某些功能)。
我想为每个客户端分离图形,例如徽标、css 和图像。

实现它的最佳方式是什么?

【问题讨论】:

    标签: asp.net-mvc routing


    【解决方案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;
      }
    
    }
    

    希望对您有所帮助。

    附:我很快就会为我自己的项目做这件事,所以我应该很快就会有一些实际的工作代码。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        其他建议:

        • 为不同的公司保留单独的文件夹(并为常见的事情使用根目录)
        • 如果您必须禁用某些功能,请不要询问公司名称,而是询问当前“个人资料”中是否允许。

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

          这种方式后添加更多配置文件更简单

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-06
          • 1970-01-01
          • 2011-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多