2

我的代码如下:

[HttpGet]
[OutputCache(Duration = 90, VaryByParam = "cityCode")]
public ActionResult About(string userName, string cityCode)
{
     //do something...
     return View();
}
  1. 当我访问 URL 时缓存工作正常:

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

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

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

4

1 回答 1

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取决于 URL,您提供的示例实际上是两个不同的URL,尽管它们会产生相同的结果。

所以尝试再请求一次 URL http://localhost:52121/LabOne/MvcCache/About/admin/010。你会看到它OutputCache正在工作,并且 MVC 将从缓存中获取结果,因为OutputCache之前已经缓存了这个 URL。

更新

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

于 2015-10-27T11:33:50.047 回答