【发布时间】: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。所以上面的方法是行不通的。我找到了解决方法here 和here(只是为了模拟 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