У меня есть приложение ASP.NET MVC, где определенные ресурсы адресуются следующим образом:
/controller/action/id?revision=123
Параметр revision является необязательным:
- , еслиотсутствует, я делаю 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
), но тогда я не смогу указать разные политики кэширования для обоих случаев.
Как выбрать другую политику кэшированияна основании наличия здесь строки запроса?