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

Asp.Net Core MVC响应缓存疑问:不同客户端是否会获取他人缓存数据?

问题

我有一个登录页面,客户端输入身份证号码后,通过Ajax请求控制器并根据该参数获取数据。控制器代码如下:

[ResponseCache(Duration = 5, Location = ResponseCacheLocation.Client)]
public IActionResult GetAll(id)
{
    var client = _context.Clients.Find(id);
    var references = _context.References.Where(r => r.ClientId == clientId).ToList();
    if(references == null)
    {
        return new JsonResult("No references found.");
    }
    return new JsonResult(references);
}

我想咨询:使用上述ResponseCache配置时,若另一个客户端登录,是否会获取当前客户端的缓存数据?


回答

不会出现这种情况的,你可以放心,核心原因有两个:

  • 客户端缓存是完全隔离的
    当你把ResponseCacheLocation设为Client时,响应缓存是存在用户自己的浏览器本地的。每个用户的浏览器缓存都是独立存储的,A用户的浏览器里的缓存数据,B用户根本访问不到,两者完全互不干扰。

  • 缓存是按请求URL区分的
    你的GetAll方法依赖id参数来返回对应数据,只要这个参数是通过URL传递的(比如请求地址是/YourController/GetAll?id=1101011990XXXXXX),不同的身份证号就会生成不同的请求URL。浏览器会以完整URL作为缓存的标识,所以不同id的请求会被当成完全不同的请求来缓存,哪怕是同一个用户换个身份证号,也不会拿到之前的缓存,更别说不同客户端了。

另外提个小细节:你的代码里有个变量名错误——var references = ... r.ClientId == clientId这里的clientId应该是client.Id吧?毕竟前面你是通过_context.Clients.Find(id)获取的client对象,这个小问题记得修正,避免出现逻辑错误或者空引用异常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:25:35