常规html中的ASP.NET Bundles?

时间:2014-03-02 05:14:14

标签: asp.net web-optimization

我的角度应用程序由ASP.NET webapi支持,我在那里提供index.html和angular处理其他所有内容。我想使用捆绑,但我看不出我是怎么做的。我是否必须使用剃须刀(或网络表单)来引用捆绑包?或者是否有一个选项可以为bundle输出提供一个固定名称,我可以在src / hrefs中引用它?

为了澄清,我没有使用MVC或Webforms来提供html。您只需重定向到index.html,路由就是客户端。我的bundle配置是使用WebActivator.PostApplicationStartMethod完成的。

1 个答案:

答案 0 :(得分:1)

首先,只回答问题,你可以在你的html文件中使用普通链接

<script src='bundles/mybundle' type='text/javascript' language='text/javascript'></script>  

=&GT;这将包含您的javascript包到页面

此方法存在的问题是,如果修改包中包含的* .js文件,则修改将不会在包中显示。 这就是“捆绑缓存破坏”,这是ASP.NET的一个很好的功能,但只能从剃须刀模板中使用... 显然,你也可以重新启动池(但这很慢并且难以自动化):)

要解决此问题,您可以使用以下

定义自己的ASP.NET MVC控制器
using System.Linq;
using System.Web.Mvc;
using System.Web.Optimization;

namespace Controllers
{
    public class DebugBundlesController : Controller
    {
        // GET: debugbundles/mybundle
        public ActionResult Mybundle()
        {
            return InlineBundleJavaScript("~/bundles/mybundle");
        }

        private ActionResult InlineBundleJavaScript(string bundlePath)
        {
            //see https://blog.mariusschulz.com/2015/10/25/inlining-css-and-javascript-bundles-with-asp-net-mvc
            var bundleContext = new BundleContext(HttpContext, BundleTable.Bundles, "~/bundles");
            var bundle = BundleTable.Bundles.Single(b => b.Path == bundlePath);
            var js = bundle.GenerateBundleResponse(bundleContext).Content;
            return JavaScript(js);
        }
    }
}

你可以这样使用:

<script src='debugbundles/mybundle' type='text/javascript' language='text/javascript'></script>

=&GT;现在,每次进行更改时,都会重新生成包。

请注意,仅在开发期间使用它,因为您几乎删除了捆绑包的所有好处(即特别是客户端和服务器缓存)