我有一个Asp.net Mvc网站,我想为不同的客户提供单独的访问和用户界面,例如:
http://company1.mysite.com
http://company2.mysite.com
http://company3.mysite.com
每个客户端将具有不同的ui但实际上具有相同的功能(或禁用某些功能) 我想为每个客户分离图形,如徽标,CSS和图像。
如何才能实现这一目标?
答案 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文件。如果要在公司之间更改图像,可以使用背景图像。
其他建议:
如果您必须禁用某些功能,请不要询问公司名称,而是询问当前“配置文件”中是否允许该名称。
If Company = A then
UseFunctionX = true
else
UseFunctionX = false
//later in the code
If UseFunctionX then
// do domenthing
这样可以更简单地添加更多配置文件