0

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

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

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

4

3 回答 3

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;
  }

}

希望有帮助。

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

于 2008-12-03T17:21:21.230 回答
1

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

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

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

于 2008-12-03T17:31:26.060 回答
0

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

其他建议:

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

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

    这样添加更多配置文件后更简单

于 2008-12-03T16:52:51.770 回答