asp.net mvc4 VaryByParam 不工作
asp.net mvc4 VaryByParam does not work
我的代码如下:
[HttpGet]
[OutputCache(Duration = 90, VaryByParam = "cityCode")]
public ActionResult About(string userName, string cityCode)
{
//do something...
return View();
}
- 当我访问 URL:
时缓存工作正常
http://localhost:52121/LabOne/MvcCache/About?userName=admin&cityCode=010
- 但是当我如下访问这条路由URL时,缓存不起作用,为什么?
我复制了你的代码,并在我的机器上进行了测试,并将 RouteConfig 配置如下
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "aboutRoute",
url: "{controller}/{action}/{userName}/{cityCode}",
defaults: new { controller = "Home", action = "About", userName = UrlParameter.Optional, cityCode = UrlParameter.Optional }
);
}
}
我遇到了同样的问题,我会解释一下:
OutputCache
依赖于URL,你提供的例子实际上是两个不同的 URL,虽然它们是将得到相同的结果。
所以尝试再请求一次 URL http://localhost:52121/LabOne/MvcCache/About/admin/010。你会看到 OutputCache
正在工作,并且 MVC 将从缓存中获取结果,因为 OutputCache
已在上一次 URL 中缓存。
更新
根据这个问题 及其接受的答案,缓存正在与 URL 一起工作并且与 MVC 路由系统无关。
我的代码如下:
[HttpGet]
[OutputCache(Duration = 90, VaryByParam = "cityCode")]
public ActionResult About(string userName, string cityCode)
{
//do something...
return View();
}
- 当我访问 URL: 时缓存工作正常
http://localhost:52121/LabOne/MvcCache/About?userName=admin&cityCode=010
- 但是当我如下访问这条路由URL时,缓存不起作用,为什么?
我复制了你的代码,并在我的机器上进行了测试,并将 RouteConfig 配置如下
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "aboutRoute",
url: "{controller}/{action}/{userName}/{cityCode}",
defaults: new { controller = "Home", action = "About", userName = UrlParameter.Optional, cityCode = UrlParameter.Optional }
);
}
}
我遇到了同样的问题,我会解释一下:
OutputCache
依赖于URL,你提供的例子实际上是两个不同的 URL,虽然它们是将得到相同的结果。
所以尝试再请求一次 URL http://localhost:52121/LabOne/MvcCache/About/admin/010。你会看到 OutputCache
正在工作,并且 MVC 将从缓存中获取结果,因为 OutputCache
已在上一次 URL 中缓存。
更新
根据这个问题