Пакеты ASP.NET в обычном html?

Мое приложение angular поддерживается веб-сайтом ASP.NET, где я обслуживаю index.html, а angular обрабатывает все остальное оттуда. Я хотел бы использовать пакетирование, но я не понимаю, как это сделать. Должен ли я использовать razor (или веб-формы) только для ссылки на пакеты? Или есть возможность дать выходному пакету фиксированное имя, на которое я могу ссылаться в своем src/hrefs?

Чтобы уточнить, я не использую MVC или Webforms для обслуживания html. Вы просто перенаправляетесь на index.html , и вся маршрутизация осуществляется на стороне клиента. Моя конфигурация пакета выполняется с помощью WebActivator.PostApplicationStartMethod.


person George R    schedule 02.03.2014    source источник
comment
так что вы используете простой html (без asp.net-mvc) и получаете данные из веб-API?   -  person shenku    schedule 02.03.2014
comment
@shenku - уточнено в исходном сообщении   -  person George R    schedule 02.03.2014
comment
@GeorgeR, ты нашел подходящее решение для этого? Я в тех же обстоятельствах, и мне не удается справиться с обновлением пакета (т.е. когда я делаю изменения в файле js и перестраиваю проект, пакет не обновляется)   -  person Christophe Blin    schedule 29.12.2015


Ответы (1)


Во-первых, чтобы ответить на вопрос, вы можете просто использовать обычную ссылку в своем html-файле.

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

=> это включит ваш пакет 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>

=> теперь каждый раз, когда вы вносите изменения, пакет будет создаваться заново.

Имейте в виду, что используйте это только во время разработки, потому что вы удаляете почти все преимущества пакетов (например, кэширование клиента и сервера).

person Christophe Blin    schedule 29.12.2015