【问题标题】:Why does Razor page (OnX) handler get invoked twice in debug/visual studio?为什么 Razor 页面 (OnX) 处理程序在调试/视觉工作室中被调用两次?
【发布时间】:2019-03-11 09:02:34
【问题描述】:

我正在编写一个剃须刀网站,在尝试调试其他内容时,我注意到我项目中任何页面的页面处理程序似乎被调用了两次。在已发布的生产版本中不会发生。

例如:

项目模型中的任何页面,以及任何处理程序类型(get/post):

    public void OnGet()
    {
        _logger.LogTrace("Main index page get");
    }

日志记录:

2019-03-11 10:11:55.9120||TRACE|*****.Pages.IndexModel|Main index page get |url: https://localhost/|action: 
2019-03-11 10:11:56.7514||TRACE|*****.Pages.IndexModel|Main index page get |url: https://localhost/|action: 

如果有一个断点,它会两次命中断点,浏览器开发工具网络日志显示一个请求。所有浏览器都会引发相同的行为。

我这辈子都无法弄清楚为什么处理程序会被击中两次!不用说,这会使调试新功能变得复杂。

有什么想法吗?

PS:我在我的开发工作站上重新启动了 VS,然后重新启动它,四处搜索以防有多个进程在监听我能想到的任何其他模糊相关的东西 - 没有结果。

【问题讨论】:

  • 刚刚测试,它似乎是导致问题的自定义中间件 - 或者至少是自上次发布生产以来对其进行的编辑。

标签: c# asp.net-core razor-pages


【解决方案1】:

这不是任何框架的问题。我的自定义中间件未能在特定条件下中止处理管道。如果我们在开发环境中,我编辑了中间件以中止其处理(因为它很烦人)但我失败了。

基本上我说:

public async Task InvokeAsync(...)
{
    if (env.IsDevelopment())
    {
         // Do stuff to make the rest of the work of this MW irrelevant
         await _next(context);
    }

    // Rest of middleware including another await _next(context)
}

显然,这是一个愚蠢的错误。给我/所有人的教训:确保你的中间件坚如磐石。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多