5

ビューの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>

次に、<%= Url.Content( "〜/ Content / StyleSheets / What.css")%>を指定すると、http://mycdn.mydomain.com/stylesheets/Content/StyleSheets/What.cssが出力されます

何も利用できない場合は、拡張メソッドを使用して自分で実行しますが、そのままで可能かどうか疑問に思いました。

4

2 に答える 2

9

上記の答えはおそらく正しいです、これが実際にどのように見えるかです:

// @ 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にある必要はありませんが、開発と管理に役立ちます。

于 2011-05-06T16:21:10.130 に答える
0

これを容易にするために組み込まれているものはないと思います。そうは言っても、これをWeb.configに追加することは本当に必要ですか?

アプリケーションのすべてのページにCDNで配布されたアイテムを含めたくない場合は、URLをどこかの中央の場所に外挿することは理解できますが、それでも、 Web.configをいじる代わりに定数文字列。URLを変更するには再コンパイルする必要があるため、これに夢中になっている人がいることは知っていますが、どのくらいの頻度で変更されますか?

ただし、これらのCDN配布アイテムをすべてのページに含めたい場合は、マスターページにURLをスローすることの何が問題になっていますか?ほとんどの場合、マスターページの変更はweb.config値の変更と同じくらい簡単です。

于 2010-01-05T15:37:28.280 に答える