У меня есть следующее действие:
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) { /* ... */ }
}
, но это кажется уродливым.
Как бы вы это реализовали?