gpt4 book ai didi

asp.net-mvc - 根据请求域捆绑 CSS 文件?

转载 作者:行者123 更新时间:2023-12-04 17:49:46 25 4
gpt4 key购买 nike

我有一个 Multi-Tenancy 应用程序,我正在尝试确定根据任何传入请求的 url 控制捆绑哪些 CSS 文件的最简单方法。

我想我可以在 RegisterBundles() 中有一些条件逻辑,将 Url 作为字符串,并相应地捆绑:

public static void RegisterBundles(BundleCollection bundles, string tenant = null) {
if (tenant == "contoso"){
bundles.Add(new StyleBundle("~/contoso.css")
}
}

但我不知道如何将字符串传递到 RegisterBundles,即使可能,也不知道如何正确解决。这里的任何帮助都会很棒。

最佳答案

现在不可能在 RegisterBundles 中做到这一点。为每个请求动态生成包内容将阻止 ASP.net 缓存缩小的 CSS(它缓存在 HttpContext.Cache 中)。

您可以做的是在 RegisterBundles 中为每个租户创建一个包,然后在 View 中选择适当的包。

View 中的示例代码:

@Styles.Render("~/Content/" + ViewBag.TenantName)

编辑:

正如您所说,在 ViewBag 中设置 TenantName 是有问题的,因为您必须按 View 进行设置。解决这个问题的一种方法是创建一个像 Styles.Render() 这样的静态函数,它根据当前租户选择正确的包名称。
public static class TenantStyles
{
public static IHtmlString Render(params string[] paths)
{
var tenantName = "test"; //get tenant name from where its currently stored
var tenantExtension = "-" + tenantName;
return Styles.Render(paths.Select(i => i + tenantExtension).ToArray());
}
}

用法
@TenantStyles.Render("~/Content/css")

包名称需要采用 {bundle}-{tenant} 格式,如 ~/Content/css-test。但是你当然可以改变格式。

关于asp.net-mvc - 根据请求域捆绑 CSS 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19871241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com