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

ASP.NET Core 5 MVC新增控制器后路由配置报TypeLoadException异常

异常原因

这个异常由两个问题共同触发:

  1. 新增控制器引用了错误的命名空间:你在ExternalUrlController中引入的System.Web.Mvc是传统.NET Framework 4.x平台下ASP.NET MVC的专属命名空间,依赖System.Web程序集中的System.Web.HttpContextBase类型,而ASP.NET Core 5是跨平台重构版本,不存在这个程序集和对应类型。当框架启动扫描控制器类型时,加载到这个继承了旧版MVC基类的控制器,就会抛出类型加载失败的异常。
  2. 路由中间件重复注册:你在Startup中同时写了app.UseMvc()和app.UseEndpoints()两套路由配置,UseMvc是ASP.NET Core 2.x及更早版本的路由实现,和Core 3.0+默认启用的端点路由存在冲突,会放大类型扫描时的异常问题。
修复步骤
  • 修正控制器的命名空间引用:删除控制器头部的using System.Web.Mvc;,替换为ASP.NET Core MVC的正确命名空间引用using Microsoft.AspNetCore.Mvc;,控制器内的业务逻辑不需要改动,修正后的控制器代码如下:
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using Solobal.Accounts.Api.Configuration;

namespace Solobal.Accounts.Api.Controllers
{
    public class ExternalUrlController : Controller
    {
        private readonly AppSettings appSettingsConfig;

        public ExternalUrlController(IOptions<AppSettings> options)
        {
            this.appSettingsConfig = options.Value;
        }

        public ActionResult Index()
        {
            return this.Redirect(this.appSettingsConfig.ExternalUrl);
        }
    }
}
  • 移除冗余的路由注册代码:删除Startup中间件配置中的app.UseMvc();代码行,ASP.NET Core 5只需要保留UseRouting+UseEndpoints的端点路由配置即可,修正后的中间件管道代码如下:
app.UseHttpsRedirection();
app.UseWebOptimizer();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});
  • 清理项目:删除解决方案下的bin、obj目录,重新生成项目,清除旧的错误编译缓存后再启动应用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:36:25