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

点击Href标签跳转页面时OnGet方法被调用两次且ID异常

OnGet方法被调用两次,第二次Guid为默认值的原因排查

场景重现

我的a标签代码:

<a href="/Text/@text.Id" class="btn btn-dark">Lire</a>

对应的后台Razor Pages OnGet方法:

public async Task<IActionResult> OnGet(Guid Id)
{
    TextPost = await _textPostRepository.GetAsync(Id);

    if (TextPost.Tag.TagManagement.RestrictedToMembers)
    {
        if (!_signInManager.IsSignedIn(User))
        {
            return RedirectToPage("/AccessDenied");
        }
    }

    return Page();
}

点击该链接后,OnGet方法会被触发两次:第一次传入的Guid是正确值,第二次却是默认的00000000-0000-0000-0000-000000000000。页面最终能正常渲染,但调试时会报错,以下是可能的原因:

  • 页面存在无效资源引用:检查页面中的<img>、<script>、<link>等标签,是否有src或href属性为空、或者指向了/Text/这类不带Id的路径。浏览器遇到这类无效引用时,会自动发起对当前页面的请求,导致第二次调用OnGet且没有传入Id。

  • 组件/局部视图触发二次请求:如果页面中使用了局部视图、Tag Helper或自定义组件,可能这些组件的初始化逻辑错误地发起了对当前页面的请求,而且没有携带Id参数。比如某些组件的渲染代码里调用了Url.Page但没传Id,或者有异步逻辑触发了额外请求。

  • 路由配置冲突:检查项目的路由配置(Program.cs/Startup.cs),是否同时存在带Id和不带Id的/Text路由规则。如果路由模板允许不带Id访问,可能某个隐性逻辑触发了这条路由,导致第二次无参数请求。

  • 浏览器重试机制:虽然页面最终正常,但第一次请求可能返回了浏览器认为需要重试的状态码(比如3xx重定向但逻辑有问题),导致浏览器自动发起第二次请求。可以通过浏览器开发者工具的网络面板查看两次请求的响应状态码,排查是否有异常。

  • 视图代码块的隐性调用:检查页面视图中的Razor代码块(@{ ... }),是否有逻辑在渲染时发起了对当前页面的二次请求,比如错误调用了OnGet相关方法,或者使用了RedirectToPage但路径不正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:38:24