6

Stillerimden bazıları geliştirme ve aşamada yerel kaynaklara url (../ img/sprites/main_sprite.png) kullanır. Ancak üretimde CDN kullanıyorum ve tüm statik kaynaklarım var. Demetleri, tüm URL'lerin cdcs yolu ile değiştirilebilmesi için dönüştürmek mümkün mü? Örnek içinASP.NET Paketleme ve Minification'daki Stilleri 'Url'lerini CDN Urllerine Dönüştürme

:

.Logo { 
background-image: url(../img/sprites/main_sprite.png); 
} 

Ancak, üretimde ben

.Logo { 
background-image: url(http://MyCdn.com/img/sprites/main_sprite.png);  
} 

Zaten mutlak benim göreli yolları yeniden yazmak için CssRewriteUrlTransform() kullanmak olmak istiyorum, bu yüzden kaynaklar olabilir onlar paketlendikten sonra bulundu. Ben Ancak bu

public string Process(string includedVirtualPath, string input) 
{ 

    if (_useCdn) 
     { 
      return new CssRewriteUrlTransform().Process(_cdn + VirtualPathUtility.ToAbsolute(includedVirtualPath), input);       
     } 
     else 
     { 
      return new CssRewriteUrlTransform().Process("~" + VirtualPathUtility.ToAbsolute(includedVirtualPath), input); 
     } 

    } 

gibi bir şey olarak sınıfını genişletmek için düşünüyordum

, Süreç I CDN yolunu eklemek aksi takdirde bir istisna atar, SanalYol olması gerekir.

URLS'yi CDN ile yeniden yazmak için bu sınıfın bir karşılığı var mı?

cevap

2

Varolan bir çözümü bulamadım. Yani, CDNStylesTransformer için temel olarak CssRewriteUrlTransform kodunu kullandım. Umarım senin için de yararlı olur. senin BundleConfiguration sınıfta

/// <summary> 
/// Finds and Replaces Urls with CDN links. 
/// </summary> 
public class CDNStylesTransformer : IItemTransform 
{ 
    private bool _useCdn; 
    private string _cdnBaseUrl; 
    public CDNStylesTransformer(bool UseCDN, string CdnBaseUrl) 
    { 
     _useCdn = UseCDN; 
     if(CdnBaseUrl == null || CdnBaseUrl.Equals(string.Empty)) 
     { 
      throw new ArgumentNullException("CdnBaseUrl"); 
     } 
     _cdnBaseUrl = CdnBaseUrl; 

    } 

    internal static string RebaseUrlToCDNUrl(string cdnUrl, string url) 
    { 
     // Don't do anything to invalid urls or absolute urls 
     if (String.IsNullOrWhiteSpace(url) || 
      String.IsNullOrWhiteSpace(url) || 
      url.StartsWith("data:") || 
       !VirtualPathUtility.IsAbsolute(url)) 
     { 
      return url; 
     } 

     return cdnUrl + url; 
    } 

    internal static string ConvertUrlsToCDNUrl(string cdnUrl, string content) 
    { 
     if (String.IsNullOrWhiteSpace(content)) 
     { 
      return content; 
     } 
     // Replace all urls with CDN urls 
     Regex url = new Regex(@"url\(['""]?(?<url>[^)]+?)['""]?\)"); 
     return url.Replace(content, ((match) => 
     { 
      return "url(" + RebaseUrlToCDNUrl(cdnUrl, match.Groups["url"].Value) + ")"; 
     })); 
    } 

    public string Process(string includedVirtualPath, string input) 
    { 
     if (_useCdn) 
     { 

      return ConvertUrlsToCDNUrl(_cdnBaseUrl, input); 
     } 
     else 
     { 
      return input; //do nothing 

     } 
    } 
} 

string cdnPath ="http://MyCdn.com"; 
bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
     "~/Content/themes/base/style1.css", new CDNStylesTransformer(bundles.UseCdn,cdnPath) 
    ));