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

React中通过Axios向C#接口传递Post参数问题

问题分析与解决

你遇到的"Unsupported Media Type"错误,核心原因是前后端的数据格式和请求头不匹配,加上后端参数接收方式不正确导致的。以下是两种可行的解决方案:

方案一:用实体类接收参数(推荐,符合REST规范)

这是接口开发中最常用的方式,后端定义与前端传递数据结构一致的实体类,直接绑定接收参数。

1. 定义数据模型类

public class UserInfo
{
    public string Name { get; set; }
    public string Desc { get; set; }
}

2. 修改Controller方法签名

[ApiController]
[Route("[controller]")]
public class CookieController : ControllerBase
{
    [HttpPost]
    public void Post([FromBody] UserInfo userInfo)
    {
        // 直接通过实体类属性获取参数值
        var name = userInfo.Name;
        var desc = userInfo.Desc;
    }
}

3. 优化前端axios请求

axios会自动将JS对象序列化为JSON,并设置正确的Content-Type: application/json请求头,无需手动调用JSON.stringify:

axios({
  method: 'post',
  url: '/cookie',
  data: { name: 'John', desc: 'Man' }
});

方案二:直接接收JSON字符串(仅特殊场景使用)

如果你确实需要后端直接接收JSON格式的字符串,需要确保前端请求头与后端接收方式匹配:

1. 修改前端请求(设置正确的请求头)

手动设置Content-Type为application/json,同时保留JSON.stringify处理:

axios({
  method: 'post',
  url: '/cookie',
  data: JSON.stringify({ name: 'John', desc: 'Man' }),
  headers: {
    'Content-Type': 'application/json'
  }
});

2. 修改后端方法签名

此时后端可以直接接收字符串参数,后续可自行反序列化处理:

[ApiController]
[Route("[controller]")]
public class CookieController : ControllerBase
{
    [HttpPost]
    public void Post([FromBody] string data)
    {
        // data即为前端传递的JSON字符串,示例用Newtonsoft.Json反序列化
        var userInfo = Newtonsoft.Json.JsonConvert.DeserializeObject<UserInfo>(data);
    }
}

关键注意点

  • 删掉前端代码里的dataType参数:它是axios用来指定响应数据类型的,和请求的Content-Type无关,属于多余配置。
  • 后端方法必须添加[FromBody]特性,否则Asp.Net Core无法从请求体中绑定参数。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:33:22