2010-01-05 51 views
5

Tôi tự hỏi nếu có một cách dễ dàng để chỉ định CDN cho tất cả nội dung mà tôi tham chiếu qua Url.Content trong chế độ xem của tôi.asp.net MVC Url.Content() Chuyển hướng CDN

Điều gì đó mà tôi có thể định cấu hình trong tệp Web.config theo cách tương tự như sau.

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

Sau đó, tôi chỉ có thể có <% = Url.Content ("~/Content/stylesheets/What.css")%> và nó sẽ ra http://mycdn.mydomain.com/stylesheets/Content/StyleSheets/What.css.

Nếu không có gì, tôi sẽ tự làm điều đó thông qua các phương pháp mở rộng, nhưng tôi đã tự hỏi nếu nó có thể ra khỏi hộp.

Trả lời

9

Câu trả lời ở trên có lẽ là đúng, đây là cách nó có thể nhìn vào thực tế:

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

Tôi nghĩ rằng công trình .. Bạn cũng có thể sử dụng nhiều phương pháp khuyến nông để phân biệt các loại nội dung để phục vụ tại địa phương và những người trên CDN .. Không có yêu cầu cấu hình trong web.config mặc dù, chỉ hữu ích cho phát triển và quản lý.

+0

Đó là những gì tôi đã kết thúc, nhưng với bộ sưu tập giá trị tên tùy chỉnh để mở rộng bản đồ cho các miền khác nhau, vì hình ảnh không nằm trên cùng một miền với CSS. –

+0

Tôi sử dụng mẫu chức năng ngăn để kiểm tra cấu hình diễn ra một lần như sau: chuỗi tĩnh riêng CDNDomain = ConfigurationManager.AppSettings ["CDNDomain"]; Func tĩnh riêng thunk = DetectCDN; chuỗi tĩnh riêng DetectCDN (UrlHelper urlHelper, đường dẫn chuỗi) { if (String.IsNullOrEmpty (CDNDomain)) thunk = (u, p) => {return u.Content (p); }; else thunk = (u, p) => {return CDNDomain + p.TrimStart ('~'); }; // chúng tôi cần xử lý vấn đề này, chúng tôi sẽ ngừng chuyển tiếp trả lại thư rác (urlHelper, path) } – IDisposable

0

Tôi không tin rằng có bất kỳ thứ gì được tích hợp sẵn để tạo điều kiện thuận lợi cho bạn. Điều đó nói rằng, là thêm này để Web.config thực sự cần thiết?

Tôi đoán nếu bạn không muốn bao gồm các mục được phân phối CDN trên mỗi trang trong ứng dụng của mình, tôi có thể hiểu ngoại suy các URL ở vị trí trung tâm ở đâu đó, nhưng thậm chí có vẻ như bạn chỉ có thể viết một số tiện ích mở rộng các phương thức trả về một chuỗi không đổi thay vì làm rối tung bằng Web.config. Tôi biết một số người xung đột với điều này bởi vì bạn phải biên dịch lại để thay đổi URL, nhưng tần suất họ sẽ thay đổi?

Trong trường hợp, tuy nhiên, bạn muốn bao gồm các mục được phân phối CDN này trên mọi trang, có gì sai khi ném URL trong trang chính của bạn? Trong hầu hết các trường hợp, việc thay đổi trang cái của bạn cũng đơn giản như thay đổi giá trị web.config.

+0

Tôi chỉ muốn có cấu hình trong tệp web.config của mình. Nó dễ dàng hơn để phát hiện và dễ đọc hơn mã. Và nó không chỉ cho các tập tin được bao gồm trong trang chủ của tôi, tôi có tải các tập tin javascript nhỏ hơn mà tôi bao gồm trong nhiều trang và tôi không muốn quên một trong số họ. –

+0

Có ý nghĩa khi định cấu hình một số thứ, tôi chỉ muốn bạn nghĩ về điều đó. Tôi đã đi vào các dự án quá thường xuyên có nghĩa đen 150 "chuyển đổi" cờ và giá trị khác nhau trong web.config, và các công cụ thực sự kết thúc lên nhận được nhân đôi bởi vì mọi người quên những gì họ đã làm trong đó :) –

+0

Tôi hoàn toàn hiểu điều đó. Cũng xảy ra ở đây. Tôi chỉ nghĩ rằng đó là thực tế, như thể tôi quyết định thêm một CDN cho swf chỉ sau này, tôi sẽ chỉ cần thêm các yếu tố với các giá trị thích hợp và tôi được thiết lập. Nếu không, tôi sẽ phải thay đổi tất cả các cuộc gọi của tôi để phương pháp và như vậy. Cảm ơn các đầu vào. –

Các vấn đề liên quan