içermemesi gereken parametreyle değiştiriliyor Sunucuda bir görünümü önbelleğe almak için MVC 5'te OutputCache kullanıyorum.OutputCache VaryByParam,
Sadece bir sorgu dizesinde iki parametresi temel alan bir görünümü önbelleğe almak istiyorum.
Eylem Metodu
[HttpGet]
[OutputCache(Location = OutputCacheLocation.Server, Duration = 60*10, VaryByParam = "id;quoteid")]
public ActionResult MyAction(int id, ProductCategoryType category)
{
return Content(DateTime.Now.ToString());
}
Rota
context.MapRoute(
"MyCustomRoute",
"myarea/{controller}/{action}/{id}/{category}/{name}/{quoteId}",
new { controller = "MyController", name = UrlParameter.Optional, quoteId = UrlParameter.Optional },
new[] { "MyNamespace.Areas.MyArea.Controllers" });
Bu çalışır ve
http://localhost:17191/myarea/mycontroller/myaction/2/1/a-holiday/aquoteid
URLBen URL {name}
kısmının herhangi bir bölümünü değiştirmek, yine benim eylem yönteminde ben Örneğin
VaryByParam="id;quoteid"
yöntem, belirtilen olsanız bile, yeni bir önbellek öğesi oluşturur, doğru Ancak veri bağlar ...
http://localhost:17191/myarea/mycontroller/myaction/2/1/a-holiday/somequoteid
ve
http://localhost:17191/myarea/mycontroller/myaction/2/1/another-holiday/somequoteid
... farklı DateTime çıkışları ürettiğini - ama olmamalıdır - bunlar aynı olmalıdır.
Neyi yanlış yaptım ve istenen davranışı nasıl başarabilirim?
Daha açıkçası Düzenleme, ProductCategoryType
o int
değer üzerinden bağlanmış olan bir Enum olduğunu. Ben ProductCategoryType
göstermek istendi beri ActionResult
düzenle 2 hata ayıklama bunun için bağlayıcı, aşağıdan ekledik doğrudur. Bu, hata ayıkladığımda doğru bir şekilde bağlanır - sorunla ilgili bir şey olduğunu düşünmüyorum.
public enum ProductCategoryType
{
TourActivity = 1,
Accommodation = 2,
BusPass = 3,
SelfDrive = 4,
}
Düzenleme 3
URL'yi değiştirme: http://localhost:17191/a/products/view/2/1?name=test1"eid=123
Ve beklendiği gibi önbellek artık çalışıyor - ama nasıl yönlendirme yoluyla daha güzel URL ile bunu başarabilirsiniz?
Ürün Kategorisi modelinizi gösterebilir misiniz? – freshbm
@freshbm Bu bir model değil - bir enum. Yine de soruya yine de ekleyeceğim. – Alex
öyleyse buradaki eyleminizi nereye yerleştirirsiniz, VaryByParam – freshbm