我有一个ASP.NET MVC应用程序,其中某些资源都是这样解决的:选择基于查询字符串的OutputCache政策
/controller/action/id?revision=123
的修订参数是可选的:
- 如果是缺少我做的302重定向到最新版本。我希望这个重定向响应只被缓存一小会儿,或者根本不需要。
- 如果它存在,我想缓存响应很长一段时间,因为任何给定的资源修订都是不可变的。
我第一次尝试是做这样的事情:
[OutputCache(Duration=10,Location=OutputCacheLocation.Server)]
public Action(string id)
{
long lastRevision = GetLastRevision(id);
return RedirectToAction("Action",
new { Id = id, revision = lastRevision });
}
[OutputCache(Duration=int.MaxValue,Location=OutputCacheLocation.Server)]
public Action(string id, long revision)
{
// ...
}
不幸的是,ASP.NET MVC路由似乎并不喜欢方法重载。它希望只有一个Action
方法,并带有一个可选参数(即long? revision
),但我无法为这两种情况指定不同的缓存策略。
如何根据查询字符串的存在情况选择不同的缓存策略?