.NET 7.0 Web应用登录/注册时415错误修复求助
修复.NET 7 Web应用登录/注册的415 Unsupported Media Type错误
常见原因及修复步骤
1. 请求Content-Type不匹配
- 检查前端表单或AJAX请求的
Content-Type是否与后端接口预期一致:如果后端接口依赖JSON格式,确保请求头为application/json;如果是表单提交,应为application/x-www-form-urlencoded或multipart/form-data。 - 若使用Razor视图表单,确认表单标签没有错误设置
enctype属性,无需额外配置时不要设为application/json。
2. 后端模型绑定配置问题
- 检查
AuthController的登录/注册Action参数绑定是否正确:- 接收JSON请求时,参数需用
[FromBody]标记;接收表单数据时用[FromForm],避免混用导致绑定失败。示例代码:// 处理JSON格式登录请求 [HttpPost("login")] public async Task<IActionResult> Login([FromBody] LoginModel model) { // 业务逻辑代码 } // 处理表单格式注册请求 [HttpPost("register")] public async Task<IActionResult> Register([FromForm] RegisterModel model) { // 业务逻辑代码 }
- 接收JSON请求时,参数需用
3. 序列化/反序列化配置问题
- 检查Program.cs中JSON序列化器配置,确保支持预期的媒体类型:
builder.Services.AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; // 其他序列化规则配置 }); - 若前端发送XML格式请求,需在后端添加XML格式支持,否则会返回415错误。
4. 前端请求数据格式错误
- 确认前端提交的数据结构与后端模型匹配:
- 用AJAX发送JSON请求时,需将表单数据转为JSON字符串,示例:
// 错误示例:直接传递FormData到JSON接口 fetch('/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: new FormData(form) }); // 正确示例 const formData = new FormData(form); const payload = Object.fromEntries(formData); fetch('/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); - 使用Razor表单时,确保表单字段名称与后端模型属性名一致(大小写敏感性取决于配置)。
- 用AJAX发送JSON请求时,需将表单数据转为JSON字符串,示例:
5. 编码问题(针对你尝试的UTF-8/UTF-16调整)
- 415错误通常与编码无关,除非请求头
Content-Type指定了后端不支持的字符集(如application/json; charset=utf-16)。建议保持默认UTF-8,确保请求头字符集与后端配置一致。
结合你提供的代码文件排查重点
- AuthController:检查Action的请求方法(HttpPost)、路由、参数绑定属性是否正确。
- _LoginPartial/Layout:检查表单的
method、action和enctype属性,确认表单提交指向正确的控制器Action,未错误设置enctype="application/json"。 - User实体:确保实体类属性可正常序列化/反序列化,无无法处理的复杂嵌套类型。
内容的提问来源于stack exchange,提问作者mykhailo ryzhanovskyi
相关产品推荐
相关产品推荐

