2010-01-05 18 views
5

मुझे आश्चर्य है कि अगर मैं उन सभी सामग्री के लिए सीडीएन निर्दिष्ट करने का एक आसान तरीका हूं जो मैंने यूआरएल के माध्यम से संदर्भित किया है। मेरे विचारों में सामग्री।एएसपीएनटी एमवीसी यूआरएल.कंटेंट() सीडीएन रीडायरेक्शन

कुछ ऐसा जो मैं अपनी Web.config फ़ाइल में निम्न के जैसा तरीके से कॉन्फ़िगर कर सकता हूं।

 
    <cdn> 
     <add filetype="css" root="http://mycdn.mydomain.com/stylesheets/" /> 
     <add filetype="js" root="http://myjscdn.mydomain.com/js/ /> 
    </cdn> 

फिर, मैं सिर्फ <% = Url.Content ("~/सामग्री/स्टाइलशीट/What.css")%> है और यह उत्पादन http://mycdn.mydomain.com/stylesheets/Content/StyleSheets/What.css होगा सकता है।

यदि कुछ भी उपलब्ध नहीं है, तो मैं इसे विस्तार विधियों के माध्यम से स्वयं कर दूंगा, लेकिन मैं सोच रहा था कि यह बॉक्स से बाहर संभव था या नहीं।

उत्तर

9

जवाब ऊपर शायद सही है, यहाँ यह व्यवहार में कैसे दिखाई दे सकती है:

// @ UrlHelperExtensions.cs 

public static class UrlHelperExtensions 
{ 
    public static string CdnContent(this UrlHelper helper, string contentPath) 
    { 
     return (ConfigurationManager.AppSettings["CDN_Available"] == "True") 
       ? ConfigurationManager.AppSettings["CDN_ContentRootUrl"] 
        + contentPath.TrimStart('~') 
       : helper.Content(contentPath); 
} 

// @ Web.config 

<appSettings> 
    // ... 
    <add key="CDN_Available" value="True" /> 
    <add key="CDN_SiteImageRoot" value="http://cdn.gbase.com/images/" /> 
    // ... 
</appSettings> 

// @ MyPage.cs 

<link href="@Url.CdnContent("~/client/css/mymin.css")" rel="stylesheet" type="text/css" media="all" /> 

मुझे लगता है कि काम करता है .. आप एक से अधिक विस्तार के तरीकों सामग्री के प्रकार अलग करने के लिए स्थानीय स्तर पर सेवा करने के लिए उपयोग कर सकते हैं और उन सीडीएन पर .. कोई आवश्यकता नहीं है कि कॉन्फ़िगरेशन web.config में है, हालांकि विकास और प्रबंधन के लिए बस उपयोगी है।

+0

मैं यही कर रहा हूं, लेकिन अलग-अलग डोमेन पर एक्सटेंशन मैप करने के लिए एक कस्टम नाम-मूल्य संग्रह के साथ, क्योंकि छवियां सीएसएस के समान डोमेन पर नहीं थीं। –

+0

मैं कॉन्फ़िगरेशन जांच को एक बार ऐसा करने के लिए फ़ंक्शन-थंक पैटर्न का उपयोग करता हूं: निजी स्थैतिक स्ट्रिंग सीडीएनडीओएमएन = कॉन्फ़िगरेशन मैनेजर.एपसेटिंग ["सीडीएनडीओएमएन"]; निजी स्थिर Func thunk = DetectCDN; निजी स्थिर स्ट्रिंग DetectCDN (UrlHelper urlHelper, स्ट्रिंग पथ) { अगर (String.IsNullOrEmpty (CDNDomain)) thunk = (यू, पी) => {वापसी u.Content (पी); }; अन्य thunk = (u, p) => {वापसी CDNDomain + p।TrimStart ('~'); }; // हमें इसे संभालने की आवश्यकता है हम आगे बढ़ने की जरूरत है वापसी थंक (urlHelper, पथ) } – IDisposable

0

मुझे विश्वास नहीं है कि यह आपके लिए सुविधाजनक बनाने के लिए कुछ भी बनाया गया है। उस ने कहा, यह Web.config में वास्तव में जरूरी है?

मुझे लगता है कि यदि आप अपने आवेदन में प्रत्येक पृष्ठ पर अपनी सीडीएन-वितरित वस्तुओं को शामिल नहीं करना चाहते हैं, तो मैं कहीं भी केंद्रीय स्थान पर यूआरएल extrapolating समझ सकता है, लेकिन फिर भी ऐसा लगता है जैसे आप कुछ एक्सटेंशन लिख सकते हैं वे विधियां जो Web.config के साथ गड़बड़ करने की बजाय निरंतर स्ट्रिंग लौटाती हैं। मुझे पता है कि कुछ लोग इस पर क्रिंग करते हैं क्योंकि आपको यूआरएल बदलने के लिए पुनः संयोजित करना पड़ता है, लेकिन वे कितनी बार बदलेंगे?

हालांकि, यदि आप प्रत्येक पृष्ठ पर इन सीडीएन-वितरित वस्तुओं को शामिल करना चाहते हैं, तो आपके मास्टर पेज में यूआरएल फेंकने में क्या गड़बड़ है? ज्यादातर मामलों में, अपने मास्टर पेज को बदलना उतना आसान है जितना वेब.कॉन्फिग वैल्यू बदलना।

+0

मुझे बस मेरी वेब कॉन्फ़िगरेशन फ़ाइल में मेरी कॉन्फ़िगरेशन चाहिए। कोड से पढ़ने के लिए स्पॉट और आसान करना आसान है। और यह केवल उन फ़ाइलों के लिए नहीं है जो मेरे मास्टर पेजों में शामिल हैं, मेरे पास बहुत छोटी जावास्क्रिप्ट फाइलें हैं जिन्हें मैं एकाधिक पृष्ठों में शामिल करता हूं और मैं उनमें से किसी को भी नहीं भूलना चाहता हूं। –

+0

कुछ चीजों को कॉन्फ़िगर करना समझ में आता है, मेरा मतलब केवल आपके लिए इसके बारे में सोचना था। मैं अक्सर परियोजनाओं में आ गया हूं जो सचमुच 150 "टॉगल" झंडे और वेब.कॉन्फिग में विभिन्न मान हैं, और सामान वास्तव में डुप्लीकेट हो जाते हैं क्योंकि लोग भूल जाते हैं कि उन्होंने वहां क्या किया है :) –

+0

मैं पूरी तरह से इसे समझता हूं। यहां भी होता है। मुझे लगता है कि यह व्यावहारिक है, जैसे कि मैं केवल बाद में एसएफएफ के लिए सीडीएन जोड़ने का फैसला करता हूं, मुझे उचित मूल्यों के साथ तत्व जोड़ना होगा और मैं सेट हूं। अन्यथा, मुझे अपनी सभी कॉल विधियों में बदलना होगा और इसी तरह। इनपुट के लिए धन्यवाद। –

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