ASP.NET Core2.0迁3.1时ConfigureServices报无法加载AutoValidateAntiforgery相关类错误
问题原因
- 代码结构错误:你当前的代码将
IdentityRegistrar.Register、services.AddSignalR、services.AddAbp等全局服务注册逻辑,错误写到了AddMvc的选项配置委托内部,执行逻辑顺序错误导致服务注册冲突。 - 框架API变更:ASP.NET Core 3.0+版本重构了防伪验证相关的内部API,原
Microsoft.AspNetCore.Mvc.ViewFeatures.Internal命名空间下的AutoValidateAntiforgeryTokenAuthorizationFilter已被移除或调整了访问级别,旧版本ABP框架对该内部API的依赖会触发加载失败。 - 依赖版本不兼容:你当前使用的ABP框架版本是适配ASP.NET Core 2.0的,不兼容3.1版本的ASP.NET Core运行时。
修复步骤
- 调整
ConfigureServices方法的代码结构,将不属于Mvc选项配置的服务注册逻辑移到AddMvc外部 - 升级所有ABP相关NuGet包到支持ASP.NET Core 3.1的版本,推荐使用ABP 4.4 LTS版本,该版本原生适配.NET Core 3.1运行时,修复了对内部MVC API的依赖问题
- 替换防伪验证过滤器的注册方式:ASP.NET Core 3.1提供了原生的
AddAutoValidateAntiforgeryToken扩展方法,不需要手动向Mvc过滤器中添加AutoValidateAntiforgeryTokenAttribute - 移除项目中零散的
Microsoft.AspNetCore.*NuGet包引用,替换为框架引用:在项目的.csproj文件中添加<FrameworkReference Include="Microsoft.AspNetCore.App" />,避免包版本不一致导致的加载冲突
修正后的代码示例
public IServiceProvider ConfigureServices(IServiceCollection services) { // 注册身份验证服务 IdentityRegistrar.Register(services); // 注册SignalR服务 services.AddSignalR(); // 注册Mvc服务并配置自动防伪验证 services.AddControllersWithViews() .AddAutoValidateAntiforgeryToken(); // 配置ABP和依赖注入 return services.AddAbp<AppLibraryBuilderWebFrontEndModule>(options => { // 配置Log4Net日志 options.IocManager.IocContainer.AddFacility<LoggingFacility>( f => f.UseAbpLog4Net().WithConfig("log4net.config") ); }); }
内容的提问来源于stack exchange,提问作者Surendra Aravabhumi
相关产品推荐
相关产品推荐

