我正在尝试实现一个 MongoDB / Memory 组合的输出缓存提供程序以与 MVC4 一起使用。这是我的初始实现:
public class CustomOutputCacheProvider : OutputCacheProvider
{
public override object Get(string key)
{
FileLogger.Log(key);
return null;
}
public override object Add(string key, object entry, DateTime utcExpiry)
{
return entry;
}
public override void Set(string key, object entry, DateTime utcExpiry)
{
}
public override void Remove(string key)
{
}
}
我的网络配置条目:
<caching>
<outputCache defaultProvider="CustomOutputCacheProvider">
<providers>
<add name="CustomOutputCacheProvider" type="MyApp.Base.Mvc.CustomOutputCacheProvider" />
</providers>
</outputCache>
</caching>
以及 HomeController 中的用法:
[OutputCache(Duration = 15)]
public ActionResult Index()
{
return Content("Home Page");
}
我的问题是,当我检查日志文件中请求的密钥时,我不仅看到了对家庭控制器的请求,还看到了所有其他路径:
a2/ <-- should only log this entry
a2/test
a2/images/test/50115c53/1f37e409/4c7ab27d/50115c531f37e4094c7ab27d.jpg
a2/scripts/jquery-1.7.2.min.js
我认为我不应该将 CustomOutputCacheProvider 设置为 Web.Config 中的 defaultProvider,我不知道如何指定要用于特定控制器操作的缓存提供程序。
使用 Asp.Net 网页,您可以通过<%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %>
在页面顶部使用来完成它,但对于 MVC,我能找到的唯一解决方案是覆盖Global.asax 中的HttpApplication.GetOutputCacheProviderName 方法。
有没有更优雅的方法通过使用 [OutputCache] 属性来实现这一点?