【问题标题】:asp.net MVC Url.Content() CDN redirectionasp.net MVC Url.Content() CDN 重定向
【发布时间】:2011-05-07 00:21:10
【问题描述】:

我想知道是否有一种简单的方法可以为我在视图中通过 Url.Content 引用的所有内容指定 CDN。

我可以在我的 Web.config 文件中以类似于以下方式配置的内容。

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

然后,我可以只使用 ,它会输出 http://mycdn.mydomain.com/stylesheets/Content/StyleSheets/What.css

如果没有可用的东西,我会通过扩展方法自己做,但我想知道是否可以开箱即用。

【问题讨论】:

    标签: asp.net-mvc redirect cdn


    【解决方案1】:

    上面的答案可能是正确的,下面是它在实践中的样子:

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

    我认为这行得通。您还可以使用多种扩展方法来隔离各种内容以在本地和 CDN 上提供服务。但并不要求配置在 web.config 中,只对开发和管理。

    【讨论】:

    • 这就是我最终所做的,但使用自定义名称-值集合将扩展映射到不同的域,因为图像与 CSS 不在同一个域中。
    • 我使用函数重击模式使配置检查发生一次,例如: private static string CDNDomain = ConfigurationManager.AppSettings["CDNDomain"];私有静态 Func thunk = DetectCDN;私有静态字符串 DetectCDN(UrlHelper urlHelper, 字符串路径) { if (String.IsNullOrEmpty(CDNDomain)) thunk = (u, p) => { return u.Content(p); }; else thunk = (u, p) => { return CDNDomain + p.TrimStart('~'); }; // 我们需要处理这个我们在循环中前进 return thunk(urlHelper, path) }
    【解决方案2】:

    我不相信有任何内置功能可以为您提供便利。也就是说,将它添加到 Web.config 真的有必要吗?

    我想如果您不想在应用程序的每个页面上包含 CDN 分发的项目,我可以理解将 URL 外推到某处的中心位置,但即便如此,您似乎也可以编写一些扩展方法它返回一个常量字符串,而不是弄乱 Web.config。我知道有些人对此感到畏缩,因为您必须重新编译才能更改 URL,但他们多久会更改一次?

    但是,如果您确实希望在每个页面上包含这些 CDN 分发的项目,那么将 URL 放入母版页有什么问题?在大多数情况下,更改母版页就像更改 web.config 值一样简单。

    【讨论】:

    • 我只想在我的 web.config 文件中包含我的配置。它比代码更容易发现和阅读。这不仅适用于我的母版页中包含的文件,我还有大量较小的 javascript 文件,这些文件包含在多个页面中,我不想忘记其中一个。
    • 配置一些东西是有道理的,我只是想让你想一想。我经常参与在 web.config 中有 150 个“切换”标志和各种值的项目,而实际上由于人们忘记了他们在那里所做的事情而导致重复的内容:)
    • 我完全理解这一点。也发生在这里。我只是认为这很实用,好像我决定稍后才为 swf 添加 CDN,我只需要添加具有正确值的 元素就可以了。否则,我将不得不更改对方法的所有调用等等。感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多