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();
}
  1. 当我访问 URL:
  2. 时缓存工作正常

http://localhost:52121/LabOne/MvcCache/About?userName=admin&cityCode=010

  1. 但是当我如下访问这条路由URL时,缓存不起作用,为什么?

http://localhost:52121/LabOne/MvcCache/About/admin/010

我复制了你的代码,并在我的机器上进行了测试,并将 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 路由系统无关。