MVC5 WebApi 2创建无法从正文中获取价值([FromBody])

时间:2017-09-10 15:50:47

标签: c# asp.net-mvc asp.net-web-api2

我创建了一个简单的创建Web API 2动作,它将从帖子主体获取一个对象,然后将其设置为DAL层。但无论我使用postman将对象放入方法中,它总是保持为null。

该模型如下所示:

namespace WebApi.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Classes
    {
        public int Id { get; set; }
        public string ClassName { get; set; }
        public int MaxStudents { get; set; }
    }
}

我的控制器如下:

[HttpPost]
public IHttpActionResult CreateClass([FromBody] Classes classObj)
{
    if (classObj == null)
    {
        return BadRequest("missing parameters.");
    }

    var newClass = new Classes()
    {
        ClassName = classObj.ClassName,
        MaxStudents = classObj.MaxStudents
    };

    _context.Classes.Add(newClass);
    _context.SaveChanges();

    var newClassUrl = Url.Content("~/") + "/api/classes/";

    return Created(newClassUrl, newClass);
}

现在当我使用邮递员时,我尝试了两种选择。

选项1:

URL: http://localhost:53308/api/classes/
Headers: Content-Type: applications/json

[
  "classObj":  {
       ClassName = "test"
       MaxStudents = 100
  }
]

选项2:

URL: http://localhost:53308/api/classes/
Headers: Content-Type: applications/json

       ClassName = "test"
       MaxStudents = 100

但在这两种情况下classObj都保持为空并返回“缺少参数”。显然我在这里错过了一些东西。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您的有效负载与操作的预期不符。

例如

[HttpPost]
public IHttpActionResult CreateClass([FromBody] Classes classObj) {
    //...
}

期望看起来像这样的JSON数据

{
    "ClassName": "test"
    "MaxStudents": 100
}

另外,如果发布到操作中的模型与添加到商店的类型相同,则实际上不需要创建新实例。

[HttpPost]
public IHttpActionResult CreateClass([FromBody] Classes classObj) {
    if (classObj == null) {
        return BadRequest("missing parameters.");
    }

    _context.Classes.Add(classObj);
    _context.SaveChanges();

    var newClassUrl = Url.Content("~/") + "/api/classes/" + classObj.Id.ToSTring();

    return Created(newClassUrl, classObj);
}