6

हम कॉर्डोवा मोबाइल ऐप के लिए सिंगल पेज एप्लिकेशन के रूप में कोणीय जेएस के साथ एक मुख्य वेब ऐप विकसित कर रहे हैं।प्रोग्रामिंग रूप से बंडलिंग संस्करण टोकन कैसे प्राप्त करें?

हमने स्थिर संसाधनों का एक हिस्सा दो बंडलों में स्थानांतरित कर दिया है जो किसी अन्य डोमेन से अलग सीडीएन वेबएप से परोसा जाएगा।

हम @Scripts.Render@Styles.Render उस्तरा सहायक का उपयोग नहीं कर रहे हैं, क्योंकि बंडलों सीधे मोबाइल (AngularJS के माध्यम से जोड़ा जाता है) इस तरह कुछ ऐप्लिकेशन के अंदर index.html एम्बेडेड स्थिर द्वारा दर्शाया जाता है: उस्तरा

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

हम उपयोग नहीं कर रहे हैं , हम किसी भी कैश टोकन को src में जोड़ नहीं रहे हैं और यह वही नहीं है जो हम चाहते हैं; हमें क्लाइंट को बंडल के अद्यतन संस्करण को डाउनलोड करने के लिए मजबूर करने के लिए एक संस्करण टोकन की आवश्यकता है।
मैंने some previous पोस्ट में पढ़ा है कि v टोकन की गणना हर बार लिपियों की होती है। रेंडर का उपयोग किया जाता है।

अब सवाल है:
प्रोग्रामिंग के इस टोकन के मूल्य तक पहुंचने के लिए यह संभव है?

हम एक सेवा नियंत्रक बनाना चाहते हैं कि, एक बंडल मार्ग दिया गया है, बंडल के SHA256 टोकन देता है।
एक बार प्राप्त होने के बाद, इसका उपयोग स्क्रिप्ट टैग बनाने के लिए किया जाएगा जो डीओएम को द्विपक्षीय रूप से जोड़ा जाएगा।

<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

मुझे लगता है कि आप इस सवाल को गलत समझते हैं; चूंकि हम रेज़र का उपयोग नहीं कर रहे हैं, हमारी स्रोत स्क्रिप्ट में कैश टोकन नहीं है। – systempuntoout

+0

@ सिस्टम सिस्टम के बंडलर के पास रेजर व्यू इंजन के साथ कोई व्यवसाय नहीं है। जब तक आपकी बैकएंड सेवा एएसपीनेट पर हो, तब तक आप एक बंडल को कॉन्फ़िगर कर सकते हैं और क्वेरीस्ट्रिंग के साथ या उसके बिना इसका उपयोग कर सकते हैं, और जब तक आप कॉन्फ़िगर किए गए वर्चुअल पथ को जानते हैं तब तक आप इसका यूआरएल प्राप्त कर सकते हैं। प्रश्न यह है कि आपको टोकन की ज़रूरत है, मेरी समझ से आपको http कॉल द्वारा प्राप्त टोकन की आवश्यकता है, और इसलिए मैंने आपके लिए एक एपिकंट्रोलर लिखा है। यदि यह वही नहीं है जो आप चाहते हैं, तो कृपया स्पष्ट करें कि आप इसे काम करने के लिए वास्तव में क्या पसंद करते हैं। – tweray

+0

@systempuntoout मेरे कोड का कौन सा हिस्सा रेज़र है? यह शुद्ध सी # कोड और सिस्टम है। वेब। ऑप्टिमाइज़ेशन .NET 4.0/4.5 में System.Web.Optimization असेंबली के तहत एक नामस्थान है। यदि आपका बैकएंड .NET ढांचे में नहीं है, तो कहानी बदल जाएगी। अन्यथा जैसा कि मैंने कहा, बंडलिंग के पास रेजर व्यू इंजन के साथ कुछ लेना देना नहीं है। बंडल तक पहुंचने के लिए आपको केवल 2 चीजें ही चाहिए: 1. आपने सर्वर के अंत में आवश्यक असेंबली का संदर्भ दिया है; 2. आपने बंडल – tweray

संबंधित मुद्दे