Angular项目:ASP.NET Core WebAPI连接Ubuntu 22.04 MySQL数据库遇阻
问题排查与解决建议
1. 核心问题:EF Core仍绑定SQL Server连接
执行dotnet ef database update出现SQL Server错误,本质是EF Core没有切换到MySQL提供器,仍在尝试连接原SQL Server数据库,需重点检查两处配置:
- 替换
appsettings.json(或服务器环境变量)中的连接字符串为MySQL格式:"ConnectionStrings": { "DefaultConnection": "server=localhost;database=你的数据库名;user=用户名;password=密码;port=3306;" } - 修改Program.cs中的EF注册代码,改用MySQL提供器(需先安装
Pomelo.EntityFrameworkCore.MySqlNuGet包):// 替换原SQL Server的注册代码 builder.Services.AddDbContext<AppDbContext>(options => options.UseMySql(builder.Configuration.GetConnectionString("DefaultConnection"), new MySqlServerVersion(new Version(8, 0, 36))));
2. 验证未发布应用的怀疑点
如果直接在服务器拉取代码执行命令,需确认:
- 代码已同步最新的连接字符串和EF配置变更
- 命令执行路径在项目根目录(包含
.csproj文件的文件夹) - 若用环境变量配置连接字符串,执行
echo $ConnectionStrings__DefaultConnection验证变量是否加载
3. MySQL网络连接二次确认
即使已注释bind-address和开放端口,仍需做基础验证:
- 服务器本地执行
mysql -u 用户名 -p,确认能正常登录MySQL - 执行
netstat -tulpn | grep 3306,检查MySQL是否监听0.0.0.0(允许所有IP访问) - 若需远程连接,用
telnet 服务器IP 3306测试端口是否可达
4. CORS配置必须保留
Angular前端(浏览器端)跨域访问后端时,浏览器会触发预检请求,必须配置CORS。生产环境建议指定具体前端域名,示例:
builder.Services.AddCors(options => { options.AddPolicy("AllowAngular", policy => { policy.WithOrigins("http://你的前端域名:端口") .AllowAnyHeader() .AllowAnyMethod(); }); }); // 注意中间件顺序:在UseRouting之后、UseAuthorization之前添加 app.UseCors("AllowAngular");
内容的提问来源于stack exchange,提问作者Mike C
相关产品推荐
相关产品推荐

