ASP.NET Core接口Swagger调用报500:全球化不变模式文化异常
ASP.NET Core接口返回500错误:全球化不变模式文化异常排查与解决
问题概述
开发的ASP.NET Core服务器在Swagger中调用Get、Post、Put等接口时均返回500错误,错误日志显示System.Globalization.CultureNotFoundException,提示en-us is an invalid culture identifier,且明确指出处于全球化不变模式。
错误核心分析
该异常是因为应用启用了全球化不变模式(Globalization Invariant Mode),在此模式下,.NET仅支持Invariant Culture,而Microsoft.Data.SqlClient尝试加载en-us文化时触发了异常,最终导致数据库连接和操作失败。
解决步骤
1. 禁用全球化不变模式
如果项目不需要启用该模式,直接关闭即可:
- 打开项目的
.csproj文件,查找并移除以下配置(如果存在):<InvariantGlobalization>true</InvariantGlobalization> - 检查系统或项目的环境变量,移除
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1的设置。
2. 强制SqlClient使用不变文化
如果必须保留全球化不变模式,可强制SqlClient全局使用不变文化:
在Program.cs的builder.Build()之前添加以下代码:
using System.Globalization; using Microsoft.Data.SqlClient; // 强制SqlClient使用不变文化 SqlConnection.Globalization = CultureInfo.InvariantCulture;
3. 修正连接字符串
当前连接字符串存在语法错误和冗余配置,可能间接导致连接问题,修正为:
"ConnectionStrings": { "DefaultConnection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WebApiReact;Integrated Security=True;Connect Timeout=30;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False" }
- 移除了重复的
Database配置,将逗号分隔改为分号,确保语法正确。
额外需要修复的潜在问题
虽然不是当前500错误的直接原因,但以下问题可能导致后续数据库操作异常:
实体模型与数据库约束不匹配
实体类FoodDatabase中Description属性的MaxLength(150)与Column(TypeName = "nvarchar(300)")不匹配,迁移文件中也显示数据库字段的maxLength: 150但类型是nvarchar(300),需统一:
- 方案1:修改实体类,将
Description的MaxLength改为300:[MaxLength(300), Column(TypeName = "nvarchar(300)")] public string Description { get; set; } = "Description"; - 方案2:修改实体类,将
Column(TypeName)改为nvarchar(150):[MaxLength(150), Column(TypeName = "nvarchar(150)")] public string Description { get; set; } = "Description";
修改后重新生成并应用迁移:
Add-Migration FixDescriptionLength Update-Database
内容的提问来源于stack exchange,提问作者Kira
相关产品推荐
相关产品推荐

