为什么Razor页面(OnX)处理程序在debug / visual studio中被调用两次?

时间:2019-03-11 00:18:31

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

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

例如:

项目模型中的任何页面,以及任何处理程序类型(获取/发布):

    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,然后重新启动它,进行搜索,以防万一有多个进程在听其他我可能想到的与之相关的东西-没有结果。

1 个答案:

答案 0 :(得分:0)

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

基本上我说:

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)
}

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