2013-06-13 25 views
18

Tôi có trang tổng quan dành riêng cho người dùng. Trang tổng quan sẽ chỉ thay đổi hàng ngày, tôi muốn sử dụng MVC'sOutputCache. Có cách nào để cấu hình bộ nhớ đệm cho mỗi người dùng và hết hạn khi yêu cầu là một ngày mới không?Định cấu hình bộ đệm đầu ra cho mỗi người dùng mvc

Tôi đã nghiên cứu điều này và thấy rằng bạn có thể mở rộng thuộc tính OutputCache để tự động đặt thời lượng của mình, tuy nhiên làm cách nào tôi có thể định cấu hình này cho mỗi người dùng?

Cảm ơn trước

Trả lời

28

Trong bạn Web.config:

<caching> 
    <outputCacheSettings> 
    <outputCacheProfiles> 
     <add name="Dashboard" duration="86400" varyByParam="*" varyByCustom="User" location="Server" /> 
    </outputCacheProfiles> 
    </outputCacheSettings> 
</caching> 

Trong bạn Controller/Action:

[OutputCache(CacheProfile="Dashboard")] 
public class DashboardController { ...} 

Sau đó, trong Global.asax của bạn:

//string arg filled with the value of "varyByCustom" in your web.config 
public override string GetVaryByCustomString(HttpContext context, string arg) 
{ 
    if (arg == "User") 
     { 
     // depends on your authentication mechanism 
     return "User=" + context.User.Identity.Name; 
     //return "User=" + context.Session.SessionID; 
     } 

    return base.GetVaryByCustomString(context, arg); 
} 

Về bản chất, GetVaryByCustomString cho phép bạn viết một phương pháp tùy chỉnh để xác định xem sẽ có một bộ nhớ cache hit/miss.

+0

có cùng khái niệm này hoạt động với DevTrends DonutCaching không? – ganders

+0

Không thử nhưng vì chúng cũng cung cấp cơ chế 'VaryByCustom'. Tôi cho rằng câu trả lời là có. – haim770

2

Hãy thử điều này trong web.config,

<system.web> 
........... 
........... 
<caching> 
    <outputCacheSettings> 
    <outputCacheProfiles> 
     <add name="UserCache" duration="1440" varyByParam="UserID" enabled="true" location="Client"/> 
    </outputCacheProfiles> 
    </outputCacheSettings> 
</caching> 
Các vấn đề liên quan