You need to enable JavaScript to run this app. Asp.net core 3.1 Razor Pages访问指定页面跳转至Index问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Asp.net core 3.1 Razor Pages访问指定页面跳转至Index问题求助

问题排查结果

核心原因

  1. 全局缓存配置错误:你在自定义安全头中间件中为所有请求的响应都设置了max-age=365天的强缓存规则,会导致浏览器第一次加载Index页面后,后续同域的页面请求优先走本地缓存,不会发送请求到服务端。你遇到的偶尔能正常触发Logout逻辑,基本是刚好缓存失效、或者你手动触发了强制刷新的情况。同时该缓存规则也会导致带查询参数的Index请求被缓存,服务端无法收到新的查询参数,自然拿到的是null值。
  2. Razor Pages路由本身无异常:ControlPanel、Error等页面可正常访问,说明路由注册逻辑是正常的,问题完全由缓存配置导致。

修复步骤

  1. 将静态资源的缓存规则从全局中间件剥离,仅对静态文件生效,删除全局中间件中以下缓存相关代码:
/// Cache control
context.Response.GetTypedHeaders().CacheControl =
    new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
    {
        Public = true,
        MaxAge = TimeSpan.FromDays(365)
    };
context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] =
    new string[] { "Accept-Encoding" };

修改UseStaticFiles配置,将缓存规则限定在静态资源上:

app.UseStaticFiles(new StaticFileOptions
{
    OnPrepareResponse = ctx =>
    {
        ctx.Context.Response.GetTypedHeaders().CacheControl =
            new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
            {
                Public = true,
                MaxAge = TimeSpan.FromDays(365)
            };
        ctx.Context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] =
            new string[] { "Accept-Encoding" };
    }
});
  1. 为动态Razor页面配置合适的缓存策略,对于需要实时响应的页面(比如Index、Logout),可以通过ResponseCache特性单独设置禁用缓存:
[ResponseCache(NoStore = true, Location = ResponseCacheLocation.None)]
public class IndexModel : PageModel
{
    // 原有逻辑
}
  1. 修复完成后清空浏览器现有缓存,或者使用无痕模式测试,避免之前的长缓存规则影响验证结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 11:15:03