ASP.NET Core 3.1程序密钥环读取报错,如何禁用DataProtection功能?
禁用ASP.NET Core 3.1的DataProtection功能解决XML根元素缺失错误
虽然你的应用没主动使用DataProtection功能,但ASP.NET Core默认会启用它(比如用于Cookie认证等场景),部分设备上的密钥文件损坏,就会触发你遇到的XML根元素缺失错误。以下是两种禁用方式:
方式一:禁用自动密钥生成并指定临时存储
在Startup.cs的ConfigureServices方法中添加配置:
public void ConfigureServices(IServiceCollection services) { // 禁用自动密钥生成,指定临时目录存储密钥(即使生成也不会影响系统) services.AddDataProtection() .DisableAutomaticKeyGeneration() .SetApplicationName("YourAppName") .PersistKeysToFileSystem(new DirectoryInfo("/tmp/dp-keys")); // 其他原有服务配置,比如: services.AddControllers(); }
方式二:彻底移除DataProtection相关服务
如果不需要任何DataProtection相关功能,直接在ConfigureServices中移除对应服务:
public void ConfigureServices(IServiceCollection services) { // 彻底移除DataProtection服务 services.RemoveAll<IDataProtectionProvider>(); services.RemoveAll<IKeyManager>(); // 其他原有服务配置 services.AddControllers(); }
也可以在Program.cs的主机配置中移除:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices(services => { services.RemoveAll<IDataProtectionProvider>(); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
禁用后,应用就不会再读取或生成DataProtection密钥文件,也就不会抛出XML解析错误了,完全不影响你访问HTTP网页的核心功能。
内容的提问来源于stack exchange,提问作者Aminos
相关产品推荐
相关产品推荐

