asp.net-mvc - ASP.NET MVC 多站点 - 存储站点配置数据的位置

标签 asp.net-mvc

我正在开发一个 ASP.NET MVC 多站点应用程序(可以托管来自同一应用程序实例/ Multi-Tenancy 应用程序的多个站点)。

我之前在 Web 表单应用程序中完成了此操作,并在自定义基页的 page_load 事件上加载了适当的站点配置数据(通过检查 url)。

使用 ASP.NET MVC,我最好在 Application_BeginRequest 中执行相同的操作吗?然后我可以将配置对象添加到 HttpContext.Current.Items。

最佳答案

我正在做一些与我正在开发的当前系统类似的事情。

我通过用户访问应用程序的 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);
    }       
}

每个Controller都会扩展BaseController,因此Site对象对于每个Controller都是可用的。如果您有任何更具体的问题,请提出,我会让您知道我们做了什么。

更新

您在上面看到的是_siteService.GetSiteByHost(host)SiteService 在它和存储库之间有一个缓存层,负责处理所有与缓存相关的内容。它定义为:

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

除非我们处理简单的数据类型(例如整数),否则我们尽量不使用Session。我不会在 session 中存储 Site 对象,但会在 session 中存储表示 SiteId 的整数。然后,下次用户访问应用程序时,我可以通过 Id 从缓存中获取与当前用户关联的 Site 对象。但在上面的情况下,这是没有必要的。

关于asp.net-mvc - ASP.NET MVC 多站点 - 存储站点配置数据的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3672176/

相关文章:

javascript - JQuery 自动完成未使用所选项目填充输入

asp.net-mvc - ASP.NET MVC 3 为托管在一台本地服务器上的多门户应用程序提供防伪造保护

ASP.NET MVC - 使用 UnitOfWork

javascript - 无法在 AJAX 成功函数内操作 DOM

c# - 在策略设计模式的情况下,Hangfire 服务器无法选择工作

asp.net-mvc - 为什么任何一种抽象都使用接口(interface)而不是抽象类?

c# - .Net MVC Actionlink 在查询字符串中使用 %20 而不是 +

asp.net - 当 url 包含 4 个或更多路径段时,MVC 3 中的 404 不会触发 Application_Error

c# - 使用 LINQ 获取 ID 列表并添加到数据库中

asp.net-mvc - kendo listview将base64图像分配给<img>标签