English 中文(简体)
一个站点,多个客户端用户界面
原标题:
  • 时间:2008-12-03 16:50:56
  •  标签:

I have an Asp.net Mvc site where I want to give a separate access and user interface to different clients like: http://company1.mysite.com
http://company2.mysite.com
http://company3.mysite.com

Each client will have a different ui but practically same functionality (or with some features disabled).
I d like to separate graphics for each client like logo, css and images.

最佳实施方式是什么?

最佳回答

有许多事情可以做。第一层已经提到的是使用不同的CSS文件。您可以动态地将不同的路径放入您的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;
  }

}

希望能帮到你。

附言:我很快就会在我的项目中完成这个,所以我很快就会有一些实际可用的代码。

问题回答

另一种选择是使用IIS进行安排。您需要检查其性能影响,但通过这样做,您可以单独控制每个应用程序(或池)。

基本上,你要为系统中的每个租户制作一个不同的网站。将其指向实际应用程序代码的应用程序文件夹。变量内容(如 css、文件库之类的?想象一下;-))应使用指向其文件夹的虚拟目录添加。

通过使用这种方法,您不会因为意外错误等原因而面临租户间数据交叉的风险。

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

其他推荐:

  • Keep separate folders for different companies (and use the root for common things)
  • 如果您需要禁用某些功能,请不要询问公司名称,而是询问是否在当前“配置文件”中允许。

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

    这样稍后添加更多的配置文件会更简单。





相关问题
热门标签