Ale*_*lex 6 c# asp.net-mvc outputcache
我在MVC 5中使用OutputCache来缓存服务器上的视图.
我只想基于查询字符串中的两个参数来缓存视图.
行动方法
[HttpGet]
[OutputCache(Location = OutputCacheLocation.Server, Duration = 60*10, VaryByParam = "id;quoteid")]
public ActionResult MyAction(int id, ProductCategoryType category)
{
return Content(DateTime.Now.ToString());
}
Run Code Online (Sandbox Code Playgroud)
路线
context.MapRoute(
"MyCustomRoute",
"myarea/{controller}/{action}/{id}/{category}/{name}/{quoteId}",
new { controller = "MyController", name = UrlParameter.Optional, quoteId = UrlParameter.Optional },
new[] { "MyNamespace.Areas.MyArea.Controllers" });
Run Code Online (Sandbox Code Playgroud)
网址
http://localhost:17191/myarea/mycontroller/myaction/2/1/a-holiday/aquoteid
Run Code Online (Sandbox Code Playgroud)
这可以正常工作并绑定数据,但是,如果我更改{name}了URL部分的任何部分,它仍然会生成一个新的缓存项,即使在我的操作方法中我已经指出了VaryByParam="id;quoteid"
例如...
http://localhost:17191/myarea/mycontroller/myaction/2/1/a-holiday/somequoteid
Run Code Online (Sandbox Code Playgroud)
和
http://localhost:17191/myarea/mycontroller/myaction/2/1/another-holiday/somequoteid
Run Code Online (Sandbox Code Playgroud)
...正在生成不同的DateTime输出 - 但它们不应该 - 它们应该是相同的.
我做错了什么,我怎样才能实现理想的行为?
编辑
需要明确的ProductCategoryType是,Enum是受其int价值约束的.当我调试时,对此的绑定是正确的ActionResult
编辑2
自从我被要求展示以来ProductCategoryType,我在下面添加了它.当我调试时,这确实正确绑定 - 我不认为它与问题有任何关系.
public enum ProductCategoryType
{
TourActivity = 1,
Accommodation = 2,
BusPass = 3,
SelfDrive = 4,
}
Run Code Online (Sandbox Code Playgroud)
编辑3
将URL更改为:
http://localhost:17191/a/products/view/2/1?name=test1"eid=123
缓存现在按预期工作 - 但是如何通过路由更漂亮的URL来实现这一点?