在ASP.NET捆绑和缩小中将样式的URL转换为CDN URL
发布时间:2020-05-28 17:12:09 所属栏目:asp.Net 来源:互联网
导读:我的一些样式使用url(../ img / sprites / main_sprite.png)来开发和阶段中的本地资源.但是在生产中我使用CDN并且我的所有静态资源都在其上.是否有可能转换bundle以使.css中的所有url都被cdn路径替换? 例如: .Logo {background-image: url(../img/sprites/m
|
我的一些样式使用url(../ img / sprites / main_sprite.png)来开发和阶段中的本地资源.但是在生产中我使用CDN并且我的所有静态资源都在其上.是否有可能转换bundle以使.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()将我的相对路径重写为绝对路径,因此可以在捆绑后找到资源. 我正在考虑将课程扩展为类似的东西 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的URL? 解决方法我无法找到现有的解决方案.所以,我使用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 – MSCharts“没有找到HTTP请求类型”GET“错误的处
- azure – 使用VSTS的ASP.NET Core Web API的CI/CD
- asp.net – 如何从SQL数据库流.flv文件
- asp.net-mvc – 使用ASP.NET MVC 2 AsyncController实现长时
- asp.net – 在div点击执行serverside代码
- asp.net-mvc – 缓存直到ASP.NET MVC和Entity Framework 4.
- asp.net-mvc – ASP.NET MVC快速教程
- asp.net-mvc – 如何使@ Html.EditorFor禁用
- 新的ASP.NET Web应用程序:有一个Login按钮可以执行某些操作
- ADO.NET实用经验 转载
推荐文章
站长推荐
- 一段时间后的第一个请求总是很慢 – ASP.NET MVC
- ASP.NET Core 2.0仅在共享文件夹中查找视图
- asp.net-web-api – Web API 2 OWIN承载令牌认证
- asp.net-mvc – 为什么我的HttpConfiguration类型
- asp.net-core – 如何从MVC 6中的ASP.Net 5 Tag
- asp.net – 如何在隐藏字段(TextBox)上触发Requi
- asp.net – 会话变量保存在哪里?
- 有没有办法我仍然可以在我的ASP.NET MVC 2项目中
- asp.net-mvc – 为IIS托管的.SVC文件配置XML-RPC
- asp.net-mvc – 在部分视图中传递参数 – MVC3 /
热点阅读
