在异步方法的vNext应用程序中使用以下内容的正确方法是什么:
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
我看到它是System.Web.Caching的一部分,但我唯一能添加的地方就是aspnet50 - >我的project.json文件的frameworkAssemblies部分,这是不正确的。
答案 0 :(得分:25)
像这样添加响应缓存中间件:
public void Configure(IApplicationBuilder application)
{
application
.UseResponseCaching()
.UseMvc();
}
此中间件根据您在响应中设置的缓存HTTP标头缓存内容。您可以查看答案的其余部分,了解如何使用ResponseCache
。
请改用新的ResponseCache
属性。 ResponseCache
不是OutputCache
的直接替代,因为它仅使用Cache-Control HTTP标头控制客户端和代理缓存。
如果您想使用服务器端缓存,请参阅this StackOverflow问题,讨论如何使用IMemoryCache
或IDistributedCache
。
// Add this to your controller action.
[ResponseCache(Duration = 3600)]
以下是使用新缓存配置文件的示例:
// Add this to your controller action.
[ResponseCache(CacheProfile="Cache1Hour")]
// Add this in Startup.cs
services.AddMvc(options =>
{
options.CacheProfiles.Add(
new CacheProfile()
{
Name = "Cache1Hour",
Duration = 3600,
VaryByHeader = "Accept"
});
});
响应缓存中间件在各种情况下停止工作,您可以在docs中了解更多信息。您可能遇到的两个常见问题是,如果它看到Authorization
或Set-Cookie
HTTP标头,它就会停止工作。
在ASP.NET 4.6中,我们可以在web.config中表示缓存配置文件,并在不重新编译代码的情况下更改设置。有关如何将缓存配置文件移动到新appsettings.json
的详细信息,而不是在Startup.cs中对其进行硬编码,请参阅this问题。
答案 1 :(得分:7)
<强>更新强>
正如AndersNS所指出的那样,它最有可能出现在RC1中:https://github.com/aspnet/Mvc/issues/536。
简单来说,目前OutputCache
中没有ASP.NET 5
或等效内容。
但请注意,OutputCache
只是一个与缓存提供程序通信的逻辑最少的属性。您可以使用attribute
轻松实现自己的Memory Cache
。或者您可以使用第三方解决方案。
我相信,当ASP.NET 5
出货时,市场上会有很多解决方案。而且我很确定我们也会有一个正式的OutputCache
等同物。
以下是基本的MemoryCache
用法,以防有人发现它有用
MemoryCache cache = MemoryCache.Default;
string cacheName = "MyCache";
if (cache.Contains(cacheName) == false || cache[cacheName] == null)
{
var data = ... get data
cache.Set(cacheName, data, new CacheItemPolicy() { SlidingExpiration = DateTime.Now.AddDays(1).TimeOfDay });
}
return cache[cacheName];