asp.net mvc4 VaryByParam不起作用

时间:2015-10-27 10:10:19

标签: asp.net-mvc-4 varybyparam

我的代码如下:

[HttpGet]
[OutputCache(Duration = 90, VaryByParam = "cityCode")]
public ActionResult About(string userName, string cityCode)
{
     //do something...
     return View();
}
  1. 当我访问网址时缓存正常工作:
  2. http://localhost:52121/LabOne/MvcCache/About?userName=admin&cityCode=010

    1. 但是当我按如下方式访问此路由URL时,缓存不起作用,为什么?
    2. http://localhost:52121/LabOne/MvcCache/About/admin/010

1 个答案:

答案 0 :(得分:0)

我复制了你的代码并在我的机器上测试了它,并将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取决于网址,您提供的示例实际上是两个不同的网址,但它们会产生相同的结果。

因此,请尝试再次请求网址http://localhost:52121/LabOne/MvcCache/About/admin/010。并且您将看到OutputCache正在运行,MVC将从缓存中提取结果,因为OutputCache已在之前的时间缓存了此URL。

<强>更新

根据这个问题Using outputcache in MVC及其接受的答案,缓存正在使用URL并且与MVC路由系统无关。