我创建了一个简单的创建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
都保持为空并返回“缺少参数”。显然我在这里错过了一些东西。
我做错了什么?
答案 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);
}