添加查询字符串后,RemoveOutputCacheItem损坏

时间:2011-03-26 03:18:38

标签: asp.net-mvc

在MVC 3中,我输出了一个像这样的JsonResult:

[OutputCache(Location = OutputCacheLocation.Server, Duration = 21600, VaryByParam = "None", VaryByCustom = "tenant")]
    public JsonResult NotifyTasks(int id) {
         return Json(new {pending = 5}, JsonRequestBehavior.AllowGet);
        }
    }

获取JSON的URL是:

http://localhost/foo/notifytasks/1

有时我用简单的

使缓存页无效
HttpResponse.RemoveOutputCacheItem("foo/notifytasks");

方法签名已更改,RemoveOutputCacheItem不再有效。该URL现在附加了查询字符串?status = Status1 ,这打破了RemoveOutputCacheItem。

[OutputCache(Location = OutputCacheLocation.Server, Duration = 21600, VaryByParam = "None", VaryByCustom = "tenant")]
    public JsonResult NotifyTasks(int id, string status) {
         return Json(new {pending = 5}, JsonRequestBehavior.AllowGet);
        }
http://localhost/foo/notifytasks/1?status=Status1

如何让RemoveOutputCacheItem使用附加的查询字符串?

1 个答案:

答案 0 :(得分:4)

我有同样的问题,我认为归结为RemoveOutputCacheItem只接受路径而且查询字符串不是路径的一部分(路径<> url?)。

如果您要注册单独的路线

routes.MapRoute(
   "DifferentRoute", 
   "{controller}/{action}/{id}/{status}", 
   new { controller = "Information", action = "Index", id = UrlParameter.Optional, status = UrlParameter.Optional } 
            );

然后HttpResponse.RemoveOutputCacheItem("foo/notifytasks/1/Status1");工作正常。

我希望这就是你想要的。