gpt4 book ai didi

asp.net - 在 ASP.NET 捆绑和缩小中将样式的 URL 转换为 CDN URL

转载 作者:行者123 更新时间:2023-12-04 12:47:27 25 4
gpt4 key购买 nike

我的一些样式在开发和阶段使用 url(../img/sprites/main_sprite.png) 到本地资源。但是在生产中我使用 CDN 并且我所有的静态资源都在它上面。是否可以转换包,以便将 .css 中的所有 url 替换为 cdn 路径?

例如:

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

但是,在生产中,我希望它是
.Logo {
background-image: url(http://MyCdn.com/img/sprites/main_sprite.png);
}

我已经使用 CssRewriteUrlTransform() 将我的相对路径重写为绝对路径,因此可以在捆绑后找到资源。

我正在考虑将类(class)扩展为这样的
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);
}

}

但是,Process必须有VirtualPath,否则当我追加CDN路径时会抛出异常。

是否有等效于此类的内容来重写带有 CDN 的 URLS?

最佳答案

我无法找到现有的解决方案。所以,我使用 CssRewriteUrlTransform 代码作为我的 CDNStylesTransformer 的基础。我希望它对你也有用。

/// <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

}
}
}

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

关于asp.net - 在 ASP.NET 捆绑和缩小中将样式的 URL 转换为 CDN URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27154722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com