使用ASP.NET Core Identity登录时出现HTTP ERROR 400问题
检查防跨站请求伪造(CSRF)令牌:ASP.NET Core默认会验证POST请求的CSRF令牌,你的登录表单中未包含
__RequestVerificationToken字段,这是POST请求返回400的最常见原因。添加以下代码到<form>标签内:@Html.AntiForgeryToken()或者修改
<form>标签启用自动生成令牌:<form id="account" method="post" asp-antiforgery="true">确认.NET Core 2.2 SDK已安装:VS2022默认不包含旧版本SDK,需下载安装.NET Core 2.2 SDK,确保项目运行时环境匹配原版本。
验证项目目标框架未被修改:打开项目文件(
.csproj),确认<TargetFramework>节点值为netcoreapp2.2,避免VS2022自动升级框架版本导致兼容性问题。补全表单缺失字段:
InputModel包含RememberMe字段,但视图中无对应输入控件,绑定异常可能触发请求验证失败。添加复选框控件:<div class="form-group"> <input asp-for="Input.RememberMe" /> <label asp-for="Input.RememberMe">@Html.DisplayNameFor(m => m.Input.RememberMe)</label> </div>查看请求详细信息:使用浏览器开发者工具(F12)查看登录POST请求的Network面板:
- 确认请求URL与Login页面路由一致
- 检查表单数据是否包含Email、Password字段
- 查看响应头中的具体错误提示
调试OnPostAsync方法:在
OnPostAsync开头添加断点或日志,检查ModelState.IsValid的值。若为false,遍历ModelState.Values查看具体错误项,定位参数绑定或验证失败原因。确认Startup.cs中间件配置:检查身份验证相关配置是否正确且顺序无误:
// 配置Identity服务 services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders(); // 中间件顺序:UseAuthentication必须在UseMvc之前 app.UseAuthentication(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });检查launchSettings.json配置:确认环境变量
ASPNETCORE_ENVIRONMENT与原项目一致(如Development/Production),避免因环境配置差异导致验证规则变化。
内容的提问来源于stack exchange,提问作者steffy97

