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

.NET Core 3.1升级到6后,UseStatusCodePagesWithReExecute下IActionInvokerProvider行为异常

问题原因分析

这个问题的核心是.NET 6对**端点路由(Endpoint Routing)**的优化导致的,具体变化如下:

  1. .NET Core 3.1中,UseStatusCodePagesWithReExecute发起的重执行请求会完整遍历MVC管道,包括通过IActionInvokerProvider创建IActionInvoker的环节,因此你的Provider会被调用两次。
  2. .NET 6里,框架对重执行请求的端点匹配做了优化:当重执行的目标是一个已被识别的端点(比如你的/somecontroller对应的控制器动作),会直接复用之前解析好的端点元数据,跳过了IActionInvokerProvider的初始化调用流程,所以第二次请求不会触发你的Provider。

直接访问/somecontroller?statusCode=404时是全新请求,框架需要从头解析端点并初始化MVC执行链,因此IActionInvokerProvider会被正常调用。

可行的解决方向
  • 改用中间件注入逻辑:如果你的需求是向路由上下文添加信息,可以编写一个自定义中间件,放在UseStatusCodePagesWithReExecute之前,这样重执行的请求也会经过这个中间件,达到类似效果。
  • 手动触发Provider逻辑:在重执行的目标控制器动作中,手动调用你的IActionInvokerProvider里的逻辑,或者将逻辑提取到可复用的服务中,在需要的地方调用。
  • 调整端点匹配方式:可以尝试让重执行的目标不直接匹配已有的控制器端点,比如用一个简单的中间件处理状态码页面,避免框架复用端点元数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:25:18