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

ASP.NET Core Web API启用Session触发CryptographicException异常求助

问题解决:ASP.NET Core Web API启用Session后抛出CryptographicException异常

问题描述

为ASP.NET Core Web API项目添加Session功能,配置如下:

服务注册代码

builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession(options =>
{
   options.IdleTimeout = TimeSpan.FromMinutes(30);
});

中间件配置代码

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

调用任意API时(即使未使用Session),抛出如下异常:

System.Security.Cryptography.CryptographicException: 尝试加密提供的数据时出错。有关详细信息,请参阅内部异常。更多信息请访问http://aka.ms/dataprotectionwarning
---> System.MissingMethodException: 未找到方法: 'Boolean Microsoft.AspNetCore.Cryptography.UnsafeNativeMethods.CryptProtectData(Microsoft.AspNetCore.Cryptography.DATA_BLOB*, IntPtr, Microsoft.AspNetCore.Cryptography.DATA_BLOB*, IntPtr, IntPtr, UInt32, Microsoft.AspNetCore.Cryptography.DATA_BLOB ByRef)'.

解决方案

1. 统一ASP.NET Core相关NuGet包与SDK版本

这个异常核心原因是版本不兼容:项目中引用的Microsoft.AspNetCore系列NuGet包版本,与目标框架的SDK版本不一致,导致底层方法签名不匹配。

  • 打开项目的.csproj文件,检查所有PackageReference中以Microsoft.AspNetCore.开头的包(比如Microsoft.AspNetCore.Session、Microsoft.AspNetCore.DataProtection等),确保版本号与<TargetFramework>指定的框架版本完全匹配。例如目标框架是net6.0,则所有相关包版本应为6.x.x;若为net7.0,则版本应为7.x.x。
  • 执行dotnet restore重新还原依赖。

2. 清理项目缓存并重新生成

旧编译缓存可能残留不兼容的dll,引发异常:

  • 删除项目目录下的bin和obj文件夹;
  • 在终端执行:
    dotnet clean
    dotnet build
    

3. 手动配置DataProtection密钥存储(Windows环境适配)

Windows环境下,DataProtection默认使用系统加密API存储密钥,可能因权限或环境配置问题导致异常。可手动指定密钥存储路径:
在Program.cs的服务注册阶段添加:

builder.Services.AddDataProtection()
    .PersistKeysToFileSystem(new DirectoryInfo(@"C:\your-key-storage-path"));

(替换C:\your-key-storage-path为实际存在的本地目录,确保应用具备该目录的读写权限)

4. 确认运行环境的.NET Runtime版本

确保运行项目的环境中,安装了与项目目标框架完全匹配的.NET Runtime版本,避免用不兼容的Runtime运行项目。

内容的提问来源于stack exchange,提问作者Muhammet İkbal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:01:15