8

Tôi vừa chuyển các tệp tài nguyên của mình (javascript, css, hình ảnh) từ thư mục Content sang thư mục Assets tùy chỉnh. Và tôi đã nhận thấy một hành vi kỳ lạ - những tệp này không còn được lưu trữ bởi trình duyệt và MvcMiniProfiler cho thấy yêu cầu riêng biệt cho mỗi tài nguyên nằm trong thư mục Assets:Và vẫn còn, sự kỳ diệu của thư mục ASP.NET MVC Content là gì?

Before moving to Assets folder and after

Tôi biết rằng Content thư mục không được yêu cầu của ASP NET MVC quy ước, nhưng tại sao điều này xảy ra? Có phải Content được xử lý bằng cách nào đó đặc biệt là bởi bất kỳ ai (ví dụ: ASP.NET, IISExpress, v.v.)? Và làm thế nào để buộc bộ nhớ đệm cho các thư mục khác có chứa tài nguyên tĩnh?

EDIT: Ồ, nó có vẻ không phải là hành vi kỳ quặc ASP.NET MVC, mà chỉ là hành vi tiêu chuẩn của MvcMiniProfiler. Hiện nay tôi đang kiểm tra mà ...

EDIT: Yea, không có vấn đề với ASP.NET MVC, nó chỉ là một default configuration của MvcMiniProfiler phớt lờ chỉ những con đường: "/mini-profiler-", "/content/", "/scripts/", "/favicon.ico". Và những giá trị mặc định có thể dễ dàng mở rộng:

MiniProfiler.Settings.IgnoredPaths = MiniProfiler.Settings.IgnoredPaths 
    .Concat(new [] { "/assets/" }) 
    .ToArray(); 

Đôi khi đó là một ý tưởng tốt để đọc tài liệu hướng dẫn trước khi sử dụng một cái gì đó;)

+1

Câu hỏi tương tự - [C# Mini MVC profiler: xuất hiện để hiển thị thời gian hồ sơ cho mọi tài nguyên tĩnh!] (Http://stackoverflow.com/questions/6648249/c-sharp-mini-mvc-profiler-appears-to -be-display-profile-times-for-every-stat) –

Trả lời

4

Khi bạn đang chỉ ra trong bản cập nhật của bạn, điều này dường như là một tính năng của MvcMiniProfiler:

/// <summary> 
/// When <see cref="MiniProfiler.Start"/> is called, if the current request url contains any items in this property, 
/// no profiler will be instantiated and no results will be displayed. 
/// Default value is { "/mini-profiler-", "/content/", "/scripts/", "/favicon.ico" }. 
/// </summary> 
[DefaultValue(new string[] { "/mini-profiler-", "/content/", "/scripts/", "/favicon.ico" })] 
public static string[] IgnoredPaths { get; set; } 

Source.

Có lẽ, hình ảnh không bao giờ được lưu vào bộ nhớ cache khi bạn đang phân phối chúng thông qua Cassini, vì Cassini là khủng khiếp ở đó (ví dụ như tệp png như ứng dụng/octet-stream), nhưng vấn đề đã bị ẩn theo cách thủ công MvcMiniProfiler.

+0

Cảm ơn, chúng tôi đã đúng :)! Tôi đã tìm thấy câu trả lời trong cùng một tệp, nhưng đã tự hỏi nếu tính năng này được ghi lại ở đâu đó và không tìm thấy bất kỳ tài liệu hoặc bài đăng blog nào, chỉ là mã nguồn. –

4

Đây là một hành vi kỳ lạ. Tuy nhiên, hãy đặt mã sau vào tệp web.config của bạn dưới gốc của ứng dụng của bạn:

<system.webServer> 
    <staticContent> 
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" /> 
    </staticContent> 
    </system.webServer> 

Mã này gắn thêm tiêu đề phản hồi cần thiết để bộ nhớ đệm của trình duyệt hoạt động. Bạn có thể tinh chỉnh thời gian của khóa học. Cho biết thêm thông tin vui lòng tham khảo: http://www.iis.net/ConfigReference/system.webServer/staticContent/clientCache

+0

Vâng, cảm ơn, nó chắc chắn hoạt động. –

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