Я использую OutputCache в MVC 5 для кэширования представления на сервере.
Я хочу только кэшировать представление на основе двух параметров в строке запроса.
Метод действия
[HttpGet]
[OutputCache(Location = OutputCacheLocation.Server, Duration = 60*10, VaryByParam = "id;quoteid")]
public ActionResult MyAction(int id, ProductCategoryType category)
{
return Content(DateTime.Now.ToString());
}
Маршрут
context.MapRoute(
"MyCustomRoute",
"myarea/{controller}/{action}/{id}/{category}/{name}/{quoteId}",
new { controller = "MyController", name = UrlParameter.Optional, quoteId = UrlParameter.Optional },
new[] { "MyNamespace.Areas.MyArea.Controllers" });
URL
http://localhost:17191/myarea/mycontroller/myaction/2/1/a-holiday/aquoteid
Это работает и правильно связывает данные, однако, если я изменю какую-либо часть {name}
части URL-адреса, он все равно создаст новый элемент кеша, хотя в моем методе действия я указал VaryByParam="id;quoteid"
Например...
http://localhost:17191/myarea/mycontroller/myaction/2/1/a-holiday/somequoteid
и
http://localhost:17191/myarea/mycontroller/myaction/2/1/another-holiday/somequoteid
... генерируют разные выходные данные DateTime - но они не должны - они должны быть идентичными.
Что я сделал не так и как добиться желаемого поведения?
Изменить
Просто чтобы было ясно, ProductCategoryType
- это Enum, который связан через его значение int
. Привязка для этого правильная, когда я отлаживаю ActionResult
Редактировать 2 Поскольку меня попросили показать ProductCategoryType
, я добавил его ниже. Это правильно связывается при отладке - я не думаю, что это имеет какое-то отношение к проблеме.
public enum ProductCategoryType
{
TourActivity = 1,
Accommodation = 2,
BusPass = 3,
SelfDrive = 4,
}
Изменить 3
Изменение URL-адреса на: http://localhost:17191/a/products/view/2/1?name=test1"eid=123
И кеш теперь работает так, как ожидалось, но как мне добиться этого с более красивым URL-адресом через маршрутизацию?
quoteId
, даже не привязывая его, он правильно кешируется. Проблема все еще остается, если я изменяю часть параметраname
. - person Alex   schedule 12.05.2015