.NET Core Web API请求遇415/400错误,求排查解决
.NET Core Web API 接口调用错误排查(415/400)
初始问题:415 Unsupported Media Type 错误
相关代码
HomeController 控制器
using Microsoft.AspNetCore.Mvc; using WebAPI.Models; namespace WebAPI.Controllers { [ApiController] [Route("[controller]")] public class HomeController : Controller { [HttpPost] public IActionResult Index(User user) { return Ok(user); } } }
User 模型
namespace WebAPI.Models { public class User { public string username { get; set; } public string password { get; set; } } }
前端 jQuery 请求代码
$.ajax({ type: "POST", url: "https://localhost:7137/Home", data: { username: "username" , password: "password"}, success: function(data){console.log(data)}, dataType: "application/json" });
错误原因
.NET Core Web API 的 [ApiController] 特性默认要求请求的 Content-Type 为 application/json,但默认情况下 jQuery 的 $.ajax 直接传入对象时,会将数据编码为 application/x-www-form-urlencoded 格式,且未指定 contentType 头部,导致服务器无法识别请求的媒体类型,返回415错误。
更新后问题:添加 contentType: "application/json" 后返回400 Bad Request
更新后的前端代码
$.ajax({ url: "https://localhost:7275/Home", type: "POST", data: {username:"username",password:"password"}, contentType: "application/json", dataType: "json", success: function (data) { alert("call succeeded"); }, failure: function (response) { alert("call failed"); } });
错误原因
虽然指定了 contentType: "application/json",但传入的 data 是原生 JavaScript 对象,jQuery 不会自动将其序列化为 JSON 字符串。服务器收到的实际数据格式还是 application/x-www-form-urlencoded,但请求头部声明的是 application/json,格式不匹配导致解析失败,返回400错误。
解决方案
1. 修正前端请求:将数据序列化为 JSON 字符串
使用 JSON.stringify() 将 JavaScript 对象转为 JSON 字符串,确保请求体格式与 contentType 一致:
$.ajax({ url: "https://localhost:7275/Home", type: "POST", data: JSON.stringify({username:"username",password:"password"}), // 序列化对象 contentType: "application/json", dataType: "json", success: function (data) { alert("call succeeded"); }, failure: function (response) { alert("call failed"); } });
2. (可选)控制器参数添加 [FromBody] 特性
虽然 [ApiController] 会自动推断从请求体绑定参数,但显式添加 [FromBody] 可以让代码意图更清晰:
[HttpPost] public IActionResult Index([FromBody] User user) { return Ok(user); }
内容的提问来源于stack exchange,提问作者Avasui
相关产品推荐
相关产品推荐

