6

Opracowujemy główną WebApp z angularJS jako aplikację na jedną stronę dla aplikacji mobilnej Cordova.Jak programowo powiązać token wersji?

Przesłaliśmy część zasobów statycznych do kilku pakietów, które będą wyświetlane z innej funkcji WebNation sieci CDN z innej domeny.

Nie używamy pomocnika @Scripts.Render@Styles.Render maszynki bo wiązki są bezpośrednio odwoływać od wbudowany statyczny index.html wewnątrz aplikacji mobilnej tak (poprzez dołączany angularjs):

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

Ponieważ nie używasz maszynki nie dodajemy żadnego tokena pamięci podręcznej do src i nie tego chcemy; Potrzebujemy tokena wersji, aby zmusić klienta do pobrania zaktualizowanej wersji pakietu.
Przeczytałem w some previous posta, że ​​token v jest obliczany za każdym razem, gdy używany jest Scripts.Render.

Teraz pytanie brzmi:
Czy jest to możliwe, aby programowo uzyskać dostęp do wartości tego tokena?

Chcielibyśmy utworzyć kontroler usług, który, biorąc pod uwagę trasę pakietu, zwróci token SHA256 pakietu.
Po otrzymaniu zostanie użyty do zbudowania znaczników skryptów, które zostaną dołączone do DOM.

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

Uwaga:
Wiemy już, że możemy stworzyć naszą tokena przez siebie (na przykład za pomocą numeru kompilacji), ale byłoby miło mieć coś z mniejszym wysiłkiem i bardziej związany z mechanizmem wiązki .

+0

Chcesz utworzyć kontroler usług_, czy oznacza to, że zamierzasz utworzyć żądanie HTTP tylko po to, aby uzyskać token wersji? A może wolisz metodę htmlhelper, którą możesz bezpośrednio wykorzystać w widoku? Samo zdobycie tokena może być naprawdę proste, o ile masz wirtualną ścieżkę. – tweray

+0

Zamierzam utworzyć żądanie http tylko po to, aby uzyskać token wersji. – systempuntoout

Odpowiedz

5

Oto krótki przykład pobrania tokena v ze ścieżki wirtualnego pakunku.

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

Myślę, że źle zrozumiałeś pytanie; ponieważ nie używamy maszynki do golenia, nasze skrypty src nie mają tokena pamięci podręcznej. – systempuntoout

+0

@systempuntoout pakiet nie ma interesu z maszyną do przeglądania maszynki. Dopóki twoja usługa backendu jest na asp.net, możesz skonfigurować pakiet i używać go z lub bez querystringu, i możesz uzyskać jego adres URL, o ile znasz skonfigurowaną wirtualną ścieżkę. Pytanie brzmi: gdzie dokładnie potrzebujesz tokena, z mojego zrozumienia potrzebujesz tokenu pobranego przez połączenie http, i dlatego napisałem dla ciebie apikontroler. Jeśli tego nie chcesz, wyjaśnij, co dokładnie Ci się podoba. – tweray

+0

@systempuntoout która część mojego kodu brzytwy jest? Jest to czysty kod C# i System.Web.Optimization to przestrzeń nazw w zestawie System.Web.Optimization w .net 4.0/4.5. Jeśli twój backend nie jest w strukturze .net, historia się zmieni. W przeciwnym razie, jak powiedziałem, sprzedaż wiązana nie ma nic wspólnego z mechanizmem podglądu maszynki do golenia. Jedyne 2 rzeczy, które są ci potrzebne do uzyskania dostępu do pakietu, to: 1. Wymieniłeś niezbędny zespół na końcu serwera; 2. Skonfigurowałeś pakiet – tweray