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

如何在.NET Core 5的Startup.cs中全局设置VaryByQueryKeys = new[] { "*" }

.NET Core 5 全局配置VaryByQueryKeys实现方案

你可以通过以下两种方式在Startup.cs中完成全局配置,无需单独给每个控制器加特性:

方式1:配置响应缓存中间件全局规则

在ConfigureServices方法中添加响应缓存服务时直接配置全局参数:

public void ConfigureServices(IServiceCollection services)
{
    // 其他服务配置...
    services.AddResponseCaching(options =>
    {
        // 全局配置所有请求按所有查询参数区分缓存
        options.VaryByQueryKeys = new[] { "*" };
    });
    services.AddControllers();
}

之后在Configure方法中按正确顺序注册响应缓存中间件:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 其他中间件比如异常处理、静态文件等...
    app.UseRouting();
    // 响应缓存中间件必须放在UseRouting之后,UseAuthorization之前
    app.UseResponseCaching();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

方式2:注册MVC全局过滤器(等效于给所有控制器加特性)

如果你需要和控制器层面的[ResponseCache]特性逻辑保持一致,也可以通过全局过滤器实现:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers(options =>
    {
        // 全局添加ResponseCache过滤器,配置和控制器端特性参数一致
        options.Filters.Add(new ResponseCacheAttribute
        {
            VaryByQueryKeys = new[] { "*" },
            // 可按需添加其他参数比如 Duration = 60 等
        });
    });
    // 仍需正常注册响应缓存服务
    services.AddResponseCaching();
}

Configure方法的中间件注册顺序和方式1保持一致即可。

注意事项

如果同时配置了中间件全局参数和控制器端特性,控制器端的特性参数会覆盖全局配置的对应项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:09:02