我有一個Asp.net的mvc網站,在這裏我想給像一個單獨的接入和用戶界面,不同的客戶端: http://company1.mysite.com
http://company2.mysite.com
http://company3.mysite.com一個站點,多個客戶端UI
每個客戶都會有一個不同的用戶界面,但實際上相同的功能(或禁用某些功能)。
我想爲每個客戶端分離圖形,如徽標,css和圖像。
最好的實現方式是?
我有一個Asp.net的mvc網站,在這裏我想給像一個單獨的接入和用戶界面,不同的客戶端: http://company1.mysite.com
http://company2.mysite.com
http://company3.mysite.com一個站點,多個客戶端UI
每個客戶都會有一個不同的用戶界面,但實際上相同的功能(或禁用某些功能)。
我想爲每個客戶端分離圖形,如徽標,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;
}
}
希望有幫助。
P.S.我將很快爲我自己的項目做這個工作,所以我應該儘快爲它提供一些實際的工作代碼。
您必須檢查傳入的URL併爲每個CSS文件提供不同的CSS文件。如果您想更改公司之間的圖像,可以使用背景圖像。
其他建議:
如果您必須禁用某些功能,不會對公司的名字問,但詢問是否允許使用當前的「配置文件」。
If Company = A then
UseFunctionX = true
else
UseFunctionX = false
//later in the code
If UseFunctionX then
// do domenthing
這種方式加入了更多曲線後者是簡單
另一種選擇是使用IIS進行安排。您必須檢查性能影響,但通過這樣做,您可以分別控制每個應用程序(或一個池)。
基本上,您所做的是爲系統中的每個租戶創建不同的網站。將它指向您的應用程序文件夾以獲取實際的應用程序代碼。然後應該使用指向其文件夾的虛擬目錄添加可變內容(css,一個文件庫可能會使用你的想象力;-))。
通過使用這種方法,您將不會因爲意外的錯誤等而在租戶之間發生數據交叉的風險。