【问题标题】:ASP.NET MVC Multi site - where to store site configuration dataASP.NET MVC 多站点 - 存储站点配置数据的位置
【发布时间】:2019-09-03 17:36:17
【问题描述】:

我正在开发一个 ASP.NET MVC 多站点应用程序(可以从同一个应用程序实例/多租户应用程序托管多个站点)。

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

对于 ASP.NET MVC,我最好在 Application_BeginRequest 中做同样的事情吗?然后我可以将配置对象添加到 HttpContext.Current.Items。

【问题讨论】:

  • 多站点是什么意思?像一台机器上的许多客户端一样?多个域,一台服务器?
  • 我认为他的意思是多租户应用程序。
  • 我已经更新了我的问题 - 意识到我有点含糊。基本上这就像 Magento Commerce 中的多商店功能。

标签: asp.net-mvc


【解决方案1】:

我正在使用我正在开发的当前系统做类似的事情。

我通过用户访问应用程序的 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,除非我们正在处理简单的数据类型,比如整数。我不会在会话中存储Site 对象,但我会在会话中存储一个表示SiteId 的整数。然后下次用户访问应用程序时,我可以通过 Id 从缓存中获取与当前用户关联的Site 对象。在上述情况下,虽然这不是必需的。

【讨论】:

  • 戴夫,一个问题 - 我假设当您缓存项目或使用会话对象时,您会在密钥前面加上站点标识符?
  • 还想分享这个链接,因为它有点相关 - 讨论新的 .NET 4 System.Runtime.Cache 和滚动自己的缓存提供程序的示例 - channel9.msdn.com/posts/Glucose/…
  • 没问题的人,但如果这些答案中的任何一个(或 StackOverflow 上的任何其他答案)是正确的,请务必将其标记为!这就是这个网站的价值所在
  • @DaveDev - 我已将您的答案标记为答案,因为它更具体地针对我的问题。 @Lucas 的链接也非常有用。
【解决方案2】:

This blogger 有一系列关于 asp.net-mvc 中的多租户的不错的文章

您提到的内容听起来像是一种可行的方式来做您想做的事情,尽管它可能不是惯用的解决方案。

【讨论】:

  • 感谢您的链接 - 看起来它涵盖了我所需要的内容。
  • 没问题...自己也保存了 :)
猜你喜欢
  • 1970-01-01
  • 2012-02-21
  • 2011-05-15
  • 1970-01-01
  • 2011-08-17
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多