按照教程创建的C# WebAPI无法接收POST请求
问题:WebAPI POST/PUT请求返回415错误,请求体解析失败
背景
按照微软官方教程创建C# WebAPI,GET请求可正常返回响应,但POST或PUT请求返回415 HTTP错误,请求体解析失败。
Pet模型代码
public class Pet { public long Id { get; set; } public string? Name {get; set;} public string? Type {get; set;} public string? Breed {get; set;} public string? Description {get; set;} public string? BirthDate {get; set;} public string? ImageUrl {get; set;} public long? Adopter {get; set;} = null; public bool Available {get; set;} = false; }
控制器POST方法代码
public class PetsController : ControllerBase { ... // POST 请求处理 [HttpPost] public async Task<ActionResult<Pet>> PostPet([FromBody]Pet pet) { _context.Pet.Add(pet); await _context.SaveChangesAsync(); return CreatedAtAction(nameof(GetPet), new { id = pet.Id }, pet); } ... }
请求与响应截图
- GET请求结果:

- POST请求结果:

- 请求Payload:

POST请求完整错误响应
{ "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "One or more validation errors occurred.", "status": 400, "traceId": "00-298784fa1ee54a98afe19a0db7410d23-6cef112f5fc292b1-00", "errors":{ "$":[ "'-' is invalid within a number, immediately after a sign character ('+' or '-'). Expected a digit ('0'-'9'). Path: $ | LineNumber: 0 | BytePositionInLine: 1." ], "pet":[ "The pet field is required." ] } }
解决方案
从错误信息可明确问题根源:
- JSON格式非法:解析器在JSON开头(第0行第1位)发现非法的'-'字符,导致无法正常解析请求体,进而触发"pet字段必填"的错误。
- 可能伴随请求头缺失:若未设置
Content-Type: application/json,ASP.NET Core不会使用JSON解析器处理请求体,也会引发类似问题。
修复步骤:
- 检查请求Payload:确保JSON开头无多余符号(如'-'、空格),结构完全符合JSON规范。正确示例如下:
{ "name": "旺财", "type": "犬类", "breed": "中华田园犬", "description": "性格温顺亲人", "birthDate": "2022-03-15", "imageUrl": "https://example.com/dog.jpg", "available": true }
注意:可选字段(如Adopter)可省略或设为null,布尔值直接写true/false无需引号,字段名与模型属性名保持一致(大小写不敏感)。
确认请求头:必须添加
Content-Type: application/json,若使用Postman等工具,选择"raw"格式并指定为JSON。验证发送方式:不要用form-data或x-www-form-urlencoded格式发送,选择原始JSON格式提交请求体。
内容的提问来源于stack exchange,提问作者Dev Yego
相关产品推荐
相关产品推荐

