我有以下动作:
public class HomeController : Controller
{
public ActionResult Index(int? id) { /* ... */ }
}
我想要[OutputCache]
那个动作,但我也想要那个:
- 如果 ; 它不使用缓存
id == null
;或者 - 如果
id == null
但持续时间不同,它会使用缓存。
我想我可以通过以下方式实现:
public class HomeController : Controller
{
[OutputCache(VaryByParam = "none", Duration = 3600)]
public ActionResult Index() { /* ... */ }
[OutputCache(VaryByParam = "id", Duration = 60)]
public ActionResult Index(int id) { /* ... */ }
}
但是,此解决方案意味着 2 个操作,而id
实际是可选的,因此这可能会产生一些代码重复。当然我可以做类似的事情
public class HomeController : Controller
{
[OutputCache(VaryByParam = "none", Duration = 3600)]
public ActionResult Index() { return IndexHelper(null); }
[OutputCache(VaryByParam = "id", Duration = 60)]
public ActionResult Index(int id) { return IndexHelper(id); }
private ActionResult IndexHelper(int? id) { /* ... */ }
}
但这看起来很难看。
你将如何实现这一点?