【问题标题】:Get list of paths of files in a particular bundle without HttpContext在没有 HttpContext 的情况下获取特定包中文件的路径列表
【发布时间】:2018-01-09 17:28:22
【问题描述】:

我有一个基于 Web Api 的应用程序。 ApiController 中有一个方法,可以通过 Http-request 调用,也可以通过 Hangfire 处理程序调用。

问题是我需要获取特定捆绑包的文件路径列表,但是我找不到正确的方法。如果我有 HttpContext,我有一个解决方案:

   var httpContext = new HttpContextWrapper(HttpContext.Current);
   var reportScripts = registeredBundles.First((b) => b.Path == "~/bundles/report");

   BundleContext bundleContext = new BundleContext(httpContext, BundleTable.Bundles, "~/bundles/");
   var filePath = reportScripts.EnumerateFiles(bundleContext).First().IncludedVirtualPath;

但是,如果 Hanfire 调用我的方法,我根本没有 HttpContext。所以上面的方法是行不通的。我找到了解决方法herehere(只是为了模拟 HttpContext)。但是这个解决方案对我来说看起来很奇怪......我不会使用它。

谁能帮我找到一种从特定捆绑包中获取路径列表的方法?我很惊讶为什么 Bundle 对象具有内部字段“Items”,而不是公共字段。

如果我的解释不够清楚,请提供更多详细信息: 例如我有一个包:

            bundles.Add(new ScriptBundle("~/bundles/report")
            .Include("~/Scripts/d3js/d3.min.js")
            .Include("~/Scripts/jquery/jquery-1.12.4.js"));

我需要从那里获取字符串“Scripts/d3js/d3.min.js”。

这对我来说是必需的,因为我在服务器端呈现复杂的报告并将其发送给客户。对于报告的模板,我需要一些脚本的链接(即 Jquery 等)。我不想对我的脚本使用任何常量和硬编码路径,因为我将来可以更改脚本或文件的版本。在这种情况下,我的报告会默默地被打破。在捆绑包中,我将始终拥有最新版本的脚本,所以如果我可以从捆绑包中获取路径,那将是完美的!

提前致谢!

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-web-api


    【解决方案1】:

    捆绑包的意义在于应用程序不再提供单个文件 - 它提供从单个文件创建的捆绑包。这样做的一个效果是,从客户端的角度来看,这会掩盖哪些文件进入了捆绑包。

    这很有意义,因为如果您为客户提供一个包含两个函数的文件,他们并不关心或不需要知道您的源代码是将这些函数存储在一个文件中还是两个文件中。在模糊的意义上,这就像询问有多少 C# 源代码文件用于编译用于服务任何给定请求的类。

    我能给出的最佳建议是在报告中显示捆绑包的 URL,并提供一些额外的文档来告诉客户该捆绑包中的内容(如果他们真的想知道的话)。

    【讨论】:

      【解决方案2】:
      1. 添加

        使用 System.Web.Optimization;

      2. 使用枚举包含的脚本

        BundleResolver.Current.GetBundleContents(bundleUrl);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-25
        • 2011-05-15
        • 2021-10-14
        • 1970-01-01
        相关资源
        最近更新 更多