You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 12:52:39