You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC控制器Action的OutputCache缓存键精确格式是什么?

ASP.NET MVC中EventGames Action的OutputCache缓存键详解

嘿,这个问题问得很精准!我来给你拆解一下这个带[OutputCache(CacheProfile = "Games")]特性的Action,它的缓存键到底是怎么生成的——毕竟缓存键的构成直接决定了什么时候会命中缓存、什么时候会生成新缓存。

首先得明确:ASP.NET MVC的OutputCache缓存键是多维度组合出来的,核心取决于你的缓存配置(也就是那个"Games"缓存Profile),再加上Action本身的参数和请求上下文信息。下面分情况细说:

1. 缓存Profile配置的核心影响

首先你得去web.config里看<caching><outputCacheSettings><outputCacheProfiles>下名为"Games"的配置项,其中**VaryByParam是影响缓存键的最关键设置**:

  • 如果Games配置里没显式设置VaryByParam,默认是VaryByParam="*",这时候缓存键会包含EventGames的所有参数(也就是id和slug的具体值,包括id为null的情况)。
  • 如果设置了VaryByParam="id",那缓存键只会以id的值作为区分维度,slug的变化不会触发新缓存;同理设置VaryByParam="slug"或者VaryByParam="id,slug"(和默认*效果一致),都会对应把指定参数加入缓存键。

2. 默认缓存键的逻辑组成(无自定义VaryByCustom/Header时)

如果你的"Games"配置没有额外的VaryByCustom或VaryByHeader设置,缓存键的逻辑组成大概是这些部分(实际ASP.NET会把这些维度哈希成一个短字符串,不会是明文,但背后的判断逻辑是这些):

  • 应用程序的唯一标识(避免不同站点的缓存冲突)
  • 当前请求的路由信息:控制器名称 + Action名称(比如你的控制器叫GameController,那就是Game/EventGames)
  • "Games"缓存Profile的核心配置(比如缓存时长、缓存位置等)
  • VaryByParam指定的参数值(比如id=3、slug=olympic-2024,或者两者的组合)
  • 当前请求的文化信息(比如zh-CN或en-US,除非你在配置里加了VaryByCulture="false")

举个直观的例子(假设控制器是GameController,VaryByParam="*",文化为zh-CN),逻辑上的缓存键维度是:

[应用标识]_[Controller=Game]_[Action=EventGames]_[Profile=Games]_[id=3]_[slug=olympic-2024]_[Culture=zh-CN]

3. 额外维度的情况

如果你的"Games"缓存Profile里还配置了其他参数,缓存键会加入对应的维度:

  • 若设置了VaryByCustom="browser":缓存键会加上浏览器的类型/版本信息,比如Chrome 120和Firefox 119会生成不同的缓存项。
  • 若设置了VaryByHeader="Accept-Language":请求头里的语言值会被加入缓存键,比如en-US和fr-FR会触发不同缓存。

总之,缓存键的精确格式本质是所有影响缓存唯一性的维度的组合哈希,核心看你的"Games"缓存Profile配置,再结合Action参数和请求上下文的可变因素。

内容的提问来源于stack exchange,提问作者Mike Flynn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:45:30