我已经查看了其他 VaryByParam 问题,但我无法找到我的问题的答案。我有一个定义了以下操作的 MVC 站点:
[OutputCache(Duration = 30, VaryByParam = "TargetID")]
public JsonResult IsThingAllowed(int TargetID)
{
bool isAllowed = IsAllowed(TargetID);
return Json(isAllowed, JsonRequestBehavior.AllowGet);
}
无论 TargetID 是什么,都会返回缓存的值。但是,如果我更改TargetID
为*
,它将按预期工作(缓存值因 而异TargetID
):
[OutputCache(Duration = 30, VaryByParam = "*")]
这是 AJAX 调用:
$.ajax({
url: "/MyController/IsThingAllowed",
type: "POST",
data: JSON.stringify({ "TargetID": id }), // This is definitely varying!
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data, textStatus, xhr) {
updateThing(data);
},
error: function (xhr, textStatus, error) {
}
});
显式命名参数时我做错了什么?
编辑: 如果我们使用GET
而不是POST
.. 则有效,但POST
显然有效,因为它在我们使用时有效*
。
这是它的工作原理GET
:
$.ajax({
url: "/MyController/IsThingAllowed",
type: "GET",
data: { TargetID: id },
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data, textStatus, xhr) {
updateThing(data);
},
error: function (xhr, textStatus, error) {
}
});