2010-01-05 89 views
5

我想知道是否有一種簡單的方法來指定CDN的所有內容,我通過Url.Content在我的意見中引用。asp.net MVC 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( 「〜/內容/樣式表/ What.css」)%>和它會輸出http://mycdn.mydomain.com/stylesheets/Content/StyleSheets/What.css

如果什麼都沒有,我會通過擴展方法自己做,但我想知道它是否可以開箱即用。

回答

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中,但對開發和管理很有用。

+0

這就是我最終做的事情,但是使用自定義的名稱 - 值集合來將擴展映射到不同的域,因爲圖像與CSS不在同一個域中。 – 2011-07-27 14:40:07

+0

我使用功能thunk模式使配置檢查發生一次,如: private static string CDNDomain = ConfigurationManager.AppSettings [「CDNDomain」]; private static Func thunk = DetectCDN; 私人靜態字符串DetectCDN(UrlHelper urlHelper,串路徑) { 如果(String.IsNullOrEmpty(CDNDomain)) 形實轉換=(U,P)=> {返回u.Content(P); }; else thunk =(u,p)=> {return CDNDomain + p。TrimStart( '〜'); }; //我們需要處理這一個我們不在循環前進 return thunk(urlHelper,path) } – IDisposable 2014-01-27 18:31:16

0

我不認爲裏面有任何內容可以幫助你。這就是說,將這個添加到Web.config真的有必要嗎?

我猜如果你不想在你的應用程序的每個頁面上包含你的CDN分佈式項目,我可以理解推斷URL到某個中心位置,但即使如此,你似乎可以寫一些擴展方法返回一個常量字符串,而不是搞亂Web.config。我知道一些人對此感到不安,因爲你必須重新編譯來更改URL,但他們多久會改變一次?

但是,如果您確實希望在每個頁面上包含這些CDN分發的項目,那麼在主頁面中拋出URL會出現什麼問題?在大多數情況下,更改主頁面與更改web.config值一樣簡單。

+0

我只想在我的web.config文件中有我的配置。與代碼相比,更容易識別並更易於閱讀。而且,這不僅僅是包含在我的母版頁中的文件,我還加載了包含在多個頁面中的較小的JavaScript文件,我不想忘記其中的一個。 – 2010-01-05 15:56:38

+0

配置一些東西是有道理的,我只是想你想一想。我經常參與到項目中,它們在web.config中有150個「切換」標誌和各種值,事實上最終會重複,因爲人們忘記了他們在那裏做了什麼:) – 2010-01-05 15:58:04

+0

我完全理解這一點。這裏也會發生。我只是覺得這很實用,就好像我決定在稍後添加swf的CDN一樣,我只需要添加元素,並設置適當的值。否則,我不得不改變我所有的方法等等。感謝您的意見。 – 2010-01-05 16:32:32