首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在静态资产和基于CDN的资产之间切换以进行开发和部署的最佳方式

在静态资产和基于CDN的资产之间切换以进行开发和部署的最佳方式
EN

Stack Overflow用户
提问于 2012-02-21 01:04:00
回答 5查看 2.6K关注 0票数 7

我正在用ASP.NET MVC3进行开发和应用。我计划利用Amazons Cloudfront产品作为CDN来服务静态资产。

我很好奇,有没有人想出一种简单的方法来在用于开发的本地资产和用于部署的基于CDN的资产之间切换?

任何技巧或技巧都将非常感谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-21 05:43:48

与保罗的答案相似。

在过去,我对UrlHelper使用了一种扩展方法,它根据web.config的值创建链接。

这很有帮助,因此您不必在发布后缩小视图,而且它就像在发布时更新web.config条目一样简单。任何需要使用CDN资源的资源,您只需说Url.CdnContent("~/site.css")

我现在不在我的开发pc上,但当我回到家时,我会给你我的扩展方法的源代码

它非常简单,但它能满足我的需求

代码语言:javascript
复制
public static string CdnContent(this UrlHelper helper, string relativePath)
{
    var cdnRoot = ConfigurationManager.AppSettings["cygnus.cdnroot"];
    if (string.IsNullOrEmpty(cdnRoot))
        return UrlHelper.GenerateContentUrl(relativePath, helper.RequestContext.HttpContext);

    if (relativePath.StartsWith("~"))
        relativePath = relativePath.Substring(1);

    if (cdnRoot.EndsWith("/"))
        cdnRoot = cdnRoot.Substring(0, cdnRoot.Length - 1);

    if (!relativePath.StartsWith("/"))
        relativePath = "/" + relativePath;

    return cdnRoot + relativePath;
}
票数 7
EN

Stack Overflow用户

发布于 2012-02-21 01:29:25

我以前用几条简单的规则就做到了:

  • 在CSS中始终使用文件相对路径
  • 始终使用标准模式来引用视图中的内容(我在Url.Content中使用应用程序相对路径,即.Url.Content("~/content/file.jpg"))
  • Do不引用JavaScript中的文件。

然后在我的部署过程中,我可以简单地将所有静态资产从站点复制到CDN,CSS将工作,因为它是相对的(CSS url()值总是相对于它们所在的CSS文件,而不是请求),并且我将使用正则表达式来替换视图中的任何字符串,这些字符串的形式应该是CDN的基本路径。

票数 4
EN

Stack Overflow用户

发布于 2012-02-21 02:11:42

问得好。我建议你使用条件编译变量

如果您的项目处于调试模式,则将链接本地资产。如果您的项目处于CDN发布模式,则会链接CDN资产。

下面是一个示例:

代码语言:javascript
复制
<head runat="server">
    <% #if DEBUG %>
        <link rel="stylesheet" type="text/css" href="/Assets/Styles/Default.css" />
    <% #else %>
        <link rel="stylesheet" type="text/css" href="http://cdn.mysite.com/Assets/Styles/Default.css" />
    <% #endif %>
</head>

但是要小心,当你发布你的项目时,它应该处于发布模式。有一次,我更新了我的一个项目,它处于调试模式,一切都出错了。

下面是一些关于条件编译的很好的链接:

http://haacked.com/archive/2007/09/16/conditional-compilation-constants-and-asp.net.aspx

http://odetocode.com/blogs/scott/archive/2005/12/01/conditional-compilation-in-asp-net-2-0.aspx

http://odetocode.com/blogs/scott/archive/2007/09/24/more-on-conditional-compilation-in-asp-net.aspx

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9365191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档