6

Мы разрабатываем Main WebApp с угловым JS как приложение для одной страницы для мобильного приложения Cordova.Как получить программный токен версии пакета?

Мы переместили часть статических ресурсов в пару пакетов, которые будут обслуживаться из другого CDN WebApp из другого домена.

Мы не используем помощник @Scripts.Render@Styles.Render бритвы, потому что пучки непосредственно ссылаются из встроенных статического index.html внутри мобильных приложений, как это (прилагаемых через AngularJS):

<script src="https://service.foo.it/CDN/cdnFooJs"></script> 
<script src="https://service.foo.it/CDN/cdnFooCss"></script> 

Как мы не используем бритвы , мы не добавляем токен кэша в src, и это не то, что мы хотим; нам нужен токен версии, чтобы заставить клиент загружать обновленную версию пакета.
Я прочитал в some previous, что токен v вычисляется каждый раз, когда используется Scripts.Render.

Теперь вопрос:
Возможно ли получить доступ к значению этого токена программным путем?

Мы хотели бы создать служебный контроллер, который, учитывая маршрут связок, возвращает токен SHA256 пакета.
После получения он будет использоваться для создания тегов скриптов, которые будут добавляться динамически в DOM.

<script src="https://service.foo.it/CDN/cdnFooJs?vtoken=asd3...."></script> 
<script src="https://service.foo.it/CDN/cdnFooCss?vtoken=dasdasrq..."></script> 

Примечание:
Мы уже знаем, что мы можем создать маркер сами (например, используя номер сборки), но было бы неплохо иметь что-то с меньшими усилиями и более привязаны к механизму расслоения ,

+0

Вы хотите создать системный контроллер_, это означает, что вы собираетесь сделать HTTP-запрос только для получения токена версии? Или вы предпочитаете метод htmlhelper, который вы можете использовать напрямую? Получение самого токена может быть действительно простым, если у вас есть виртуальный путь. – tweray

+0

Я собираюсь сделать http-запрос только для получения токена версии. – systempuntoout

ответ

5

Вот краткий пример получения маркера v из виртуального пучка.

public class BundleTokenController : ApiController 
{ 
    public string Get(string path) 
    { 
     var url = System.Web.Optimization.Scripts.Url(path).ToString(); 
     //This will return relative url of the script bundle with querystring 

     if (!url.Contains("?")) 
     { 
      url = System.Web.Optimization.Styles.Url(path).ToString(); 
      //If it's not a script bundle, check if it's a css bundle 
     } 

     if (!url.Contains("?")) 
     { 
      throw new Exception("Invalid path"); 
      //If neither, the path is invalid, 
      //or something going wrong with your bundle config, 
      //do error handling correspondingly 
     } 

     return GetTokenFromUrl(url); 
    } 

    private static string GetTokenFromUrl(string url) 
    { 
     //Just a raw way to extract the 'v' token from the relative url, 
     //there can be other ways 

     var querystring = url.Split('?')[1]; 

     return HttpUtility.ParseQueryString(querystring)["v"]; 
    } 
} 
+0

Я думаю, вы неправильно поняли вопрос; поскольку мы не используем бритву, наши скрипты src не имеют маркера кэша. – systempuntoout

+0

@systempuntoout the bundling не имеет бизнеса с движком зрения бритвы. Пока ваша бэкэнд-служба находится на asp.net, вы можете настроить пакет и использовать его с помощью или без запроса, и вы можете получить его URL-адрес до тех пор, пока вы знаете настроенный виртуальный путь. Вопрос в том, где именно вам нужен токен, из моего понимания вам нужен токен, полученный с помощью HTTP-вызова, и именно поэтому я написал Apicontrolelr для вас. Если это не то, что вы хотите, уточните, что именно вам нравится. – tweray

+0

@systempuntoout, какая часть моего кода - бритва? Это чистый код C# и System.Web.Optimization - это пространство имен в сборке System.Web.Optimization в .net 4.0/4.5. Если ваш бэкэнд не находится в среде .net, история изменится. В противном случае, как я сказал, соединение не имеет никакого отношения к движку зрения бритвы. Только две вещи, которые вам нужны для доступа к пакету, - это только: 1. Вы указали необходимую сборку на сервере; 2. Вы настроили пакет – tweray