我有一个 Asp.net Mvc 站点,我想为不同的客户端提供单独的访问和用户界面,例如:
http://company1.mysite.com http://company2.mysite.com http ://company3.mysite。 com
每个客户端都有不同的用户界面,但功能几乎相同(或禁用某些功能)。
我想为每个客户分离图形,如徽标、css 和图像。
实现它的最佳方式是什么?
我有一个 Asp.net Mvc 站点,我想为不同的客户端提供单独的访问和用户界面,例如:
http://company1.mysite.com http://company2.mysite.com http ://company3.mysite。 com
每个客户端都有不同的用户界面,但功能几乎相同(或禁用某些功能)。
我想为每个客户分离图形,如徽标、css 和图像。
实现它的最佳方式是什么?
你可以做很多事情。如前所述,第一级是使用不同的 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 我很快就会为我自己的项目做这个,所以我应该很快就会有一些实际的工作代码。
另一种选择是使用 IIS 进行安排。您必须检查对性能的影响,但通过这样做,您可以分别控制每个应用程序(或池)。
基本上,您所做的是为系统中的每个租户创建一个不同的网站。使其指向您的应用程序文件夹以获取实际的应用程序代码。然后应该使用指向其文件夹的虚拟目录添加变量内容(css,也许是文件库?发挥你的想象力;-))。
通过使用这种方法,您将不会有由于意外错误等导致租户之间数据交叉的风险。
您必须检查传入的 URL 并为每个 URL 提供不同的 CSS 文件。如果要在公司之间更改图像,可以使用背景图像。
其他建议:
如果您必须禁用某些功能,请不要询问公司名称,而是询问当前“个人资料”中是否允许。
If Company = A then
UseFunctionX = true
else
UseFunctionX = false
//later in the code
If UseFunctionX then
// do domenthing
这样添加更多配置文件后更简单