开发者

ASP.NET MVC Multi site - where to store site configuration data

I'm developing an ASP.NET 开发者_JS百科MVC multi site application (can host multiple sites from the same application instance / multi-tenant application).

I've previously done this in a web forms application and loaded up the appropriate site configuration data (by inspecting the url) on the page_load event of a custom base page.

With ASP.NET MVC would I be best to do the same in Application_BeginRequest? I can then add the configuration object to HttpContext.Current.Items.


I'm doing something similar with the current system I'm working on.

I'm determining the site by the url the user accesses the application as follows:

public class BaseController : Controller
{
    protected override void Initialize(RequestContext requestContext)
    {
        var host = requestContext.HttpContext.Request.Url.Host;
        Site = _siteService.GetSiteByHost(host);

        base.Initialize(requestContext);
    }       
}

Every Controller then extends BaseController, so the Site object is available to every Controller. If you have any more specific questions, ask and I'll let you know what we did.

update

What you see above is _siteService.GetSiteByHost(host). SiteService has a caching layer between it and the Repository, which takes care of all the cache related stuff. it is defined as:

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;
}

We try not to use the Session unless we're dealing with simple data types, like an integer. I wouldn't store a Site object in the Session, but I would store an integer that represents the SiteId in the session. Then the next time the user accesses the application, I can get the Site object that's associated with the current user from the cache by Id. In the case above though that's not necessary.


This blogger has what looks to be a decent series of articles about multi-tenancy in asp.net-mvc

What you mention sounds like a workable way of doing what you want, though it may not be the idiomatic solution.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜