【问题标题】:Asp.net Core 2 Domain dependent View selection?Asp.net Core 2 域依赖视图选择?
【发布时间】:2018-08-14 04:28:08
【问题描述】:

我在 ASP.NET Core 2.0 中有一个新的多租户 Web 应用程序,单个 DB。

我已经建立了一种通过在一个简单的中间件中检查域来确定特定请求的“TenantId”的方法。

我还建立了一个 DataContext,它根据需要将 TenantId 过滤器应用于适用的表。

我不清楚的最后一件事是如何在共享控制器的同时根据 TenantId 区分视图/部分视图。

我认为应用程序首先在某种 TenantId 子文件夹中查找自定义租户视图的方案,如果找不到它,它会通过常规步骤来定位视图......可能工作正常?这是一个合理的方法吗?换句话说,它应该使用专门的租户视图(如果存在),否则使用默认视图。

这是否涉及构建某种自定义视图引擎?

我已经尝试过与基于租户的 Html 片段类似的东西,但维护它很痛苦,所以我正在为这个项目寻找更直接的东西。

我也愿意接受有关如何实现此功能的其他建议。

提前致谢!

【问题讨论】:

    标签: asp.net asp.net-core multi-tenant


    【解决方案1】:

    你不需要一个完整的自定义视图引擎,你可以实现一个 IViewLocationExpander 来让它检查不同位置的视图。

    在我的项目中,我有多个租户支持,包括共享主题和租户特定主题。我可以通过将副本放在主题文件夹下方来覆盖任何视图,即主视图可以是 Views/SiteAdmin/Index,我可以在 /pathtothemes/themefolder/SiteAdmin/Index 中覆盖它

    你可以看到my implementation of IViewLocationExpander here

    你如何注册你的 IViewLocationExpander 是这样的:

    services.AddMvc()
                .AddRazorOptions(options =>
                {
                    options.ViewLocationExpanders.Add(new cloudscribe.Core.Web.Components.SiteViewLocationExpander());
                })
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
                ;
    

    【讨论】:

    • 完美!比我想象的要简单!
    猜你喜欢
    • 2018-03-24
    • 1970-01-01
    • 2018-08-20
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多