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

Ionic 3 + Angular 5 POST请求报错求助:媒体类型'text/plain'不被支持

解决ASP.NET Web API POST请求中"text/plain"媒体类型不支持的问题

我太懂你这种明明按思路调整了却还是报错的挫败感了!咱们一步步拆解这个问题,从前端到后端逐个排查:

一、先盯紧前端请求的细节(从你的package.json看是Ionic项目)

你说已经设置了Content-Type,但很可能是请求体格式没转对,导致即使Header设了JSON,实际发送的还是纯文本。

正确的前端请求示例(Angular/Ionic HttpClient)

import { HttpClient, HttpHeaders } from '@angular/common/http';

// 定义请求头,明确指定JSON类型
const requestHeaders = new HttpHeaders({
  'Content-Type': 'application/json'
});

// 要提交的实体数据
const employeePayload = {
  name: "Satinder",
  position: "Engineer"
};

// 发送请求时,务必用JSON.stringify把对象转成JSON字符串!
this.http.post('/api/employees', JSON.stringify(employeePayload), { headers: requestHeaders })
  .subscribe(
    res => console.log("提交成功:", res),
    err => console.error("请求失败:", err)
  );

⚠️ 重点:如果直接传JavaScript对象而不转成JSON字符串,很多情况下浏览器会自动把Content-Type设为text/plain,这就是报错的根源!

二、检查ASP.NET Web API端的配置

如果前端请求没问题,那就要看后端是否正确启用了JSON格式化支持:

1. .NET Core 项目(Startup.cs)

确保在ConfigureServices里正确配置了Controllers和JSON选项:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers()
        .AddJsonOptions(options =>
        {
            // 可选:保持模型属性名和JSON字段大小写一致(避免序列化时自动转驼峰)
            options.JsonSerializerOptions.PropertyNamingPolicy = null;
        });
}

2. .NET Framework 项目(WebApiConfig.cs)

要主动添加JSON格式化器,并确保它支持application/json类型:

public static void Register(HttpConfiguration config)
{
    // 启用JSON格式化,并添加支持的媒体类型
    config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"));
    
    // 如果不需要XML格式,可以移除XML格式化器,避免干扰
    config.Formatters.Remove(config.Formatters.XmlFormatter);
}

3. 控制器Action的参数要正确

别用string类型接收请求体,一定要用强类型模型,并且加上[FromBody]特性(虽然默认是FromBody,但明确写上更稳妥):

[HttpPost]
[Route("api/employees")]
public IHttpActionResult AddEmployee([FromBody] EmployeeModel employee)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    
    // 这里写你的数据存储逻辑
    return Ok("员工信息提交成功");
}

// 对应的模型类
public class EmployeeModel
{
    public string Name { get; set; }
    public string Position { get; set; }
}

如果用string接收,Web API会默认把请求体识别为text/plain,自然会报错。

三、用测试工具验证请求

如果上面两步都排查完还是有问题,建议用Postman或者Fiddler直接发送请求测试:

  • 请求方法:POST
  • 请求头:Content-Type: application/json
  • 请求体:
{
  "Name": "Satinder singh",
  "Position": "Senior Developer"
}

如果工具发送能成功,说明问题肯定在前端代码的请求配置上;如果工具发送也报错,那就要检查Web API的路由、模型验证或者服务器配置了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:23:17