我正在開發ASP.NET MVC多站點應用程序(可以從同一應用程序實例/多租戶應用程序託管多個站點)。ASP.NET MVC多站點 - 在哪裏存儲站點配置數據
我以前在一個Web表單應用程序中完成了這項工作,並在自定義基頁的page_load事件中加載了相應的站點配置數據(通過檢查url)。
有了ASP.NET MVC,我最好在Application_BeginRequest中做同樣的事情嗎?然後,我可以將配置對象添加到HttpContext.Current.Items。
我正在開發ASP.NET MVC多站點應用程序(可以從同一應用程序實例/多租戶應用程序託管多個站點)。ASP.NET MVC多站點 - 在哪裏存儲站點配置數據
我以前在一個Web表單應用程序中完成了這項工作,並在自定義基頁的page_load事件中加載了相應的站點配置數據(通過檢查url)。
有了ASP.NET MVC,我最好在Application_BeginRequest中做同樣的事情嗎?然後,我可以將配置對象添加到HttpContext.Current.Items。
我正在做類似於當前正在處理的sytsem的東西。
我determinging由url網站的用戶訪問應用程序,如下所示:
public class BaseController : Controller
{
protected override void Initialize(RequestContext requestContext)
{
var host = requestContext.HttpContext.Request.Url.Host;
Site = _siteService.GetSiteByHost(host);
base.Initialize(requestContext);
}
}
每個控制器在我的系統擴展BaseController,所以網站對象可用於每個控制器。如果您有任何更具體的問題,請問我會讓你知道我們做了什麼。
upate
你上面看到的是_siteService.GetSiteByHost(host)
。 SiteService在它和Repository之間有一個緩存層,它負責處理與緩存相關的所有內容。它被定義爲:
public Site GetSiteByHost(string host)
{
string rawKey = GetCacheKey(string.Format("GetSiteByHost by host{0}", host));
var site = (Site)_cachingService.GetCacheItem(rawKey);
if (site == null)
{
site = _siteRepository.GetSiteByHost(host);
AddCacheItem(rawKey, site);
}
return site;
}
我們儘量不要除非我們處理的簡單數據類型,像int使用雪村。我不會在Session中存儲一個Site對象,但是我會在會話中存儲一個代表SiteId的int值。然後,下次用戶訪問應用程序時,我可以通過Id從緩存中獲取與當前用戶關聯的Site對象。在上面的情況下,雖然沒有必要。
戴夫,一個問題 - 我假設當你緩存項目或使用會話對象時,你是用站點標識符爲你的密鑰加前綴? – 2010-09-09 11:55:13
我更新了答案以反映您的問題。 – DaveDev 2010-09-09 13:41:10
非常感謝 - 這是有幫助的 – 2010-09-09 19:52:04
This blogger有什麼看起來是一個不錯的一系列asp.net-MVC大約多租戶文章
你所提到的聲音就像做你想要什麼的可行的方法,雖然它可能不是成語解。
感謝您的鏈接 - 看起來像它涵蓋了我所需要的。 – 2010-09-08 22:37:09
沒問題...爲自己保存以及:) – 2010-09-08 22:54:19
你是什麼意思的多站點?像一臺機器上的許多客戶一樣?許多域名,一臺服務器? – 2010-09-08 21:53:51
我認爲他意味着一個多租戶應用程序。 – Omar 2010-09-08 21:57:58
我更新了我的問題 - 意識到我有點含糊。基本上這就像Magento Commerce中的多商店功能。 – 2010-09-08 21:58:34