MVC5 WebApi 2创建没有从身体获得价值([FromBody])
问题描述:
我创建了一个简单的创建Web API 2操作,它将从帖子主体中获取一个对象,然后将其设置为DAL层。然而,无论我使用邮递员将对象放入方法中,它始终保持为空。MVC5 WebApi 2创建没有从身体获得价值([FromBody])
这个模型看起来是这样的:
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
保持为空和返回。所以显然我在这里错过了一些东西。
我在做什么错?
答
您的有效载荷与期望的行动不符。
例如
[HttpPost]
public IHttpActionResult CreateClass([FromBody] Classes classObj) {
//...
}
会认为像这样
{
"ClassName": "test"
"MaxStudents": 100
}
也因为贴到行动的模型是同类型添加到存储在那里是不是真的JSON数据需要创建一个新的实例。
[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);
}
那么工作,我想我正在考虑使用完整的对象太复杂。不过,我确实有另一个关于DTO的问题。我会用它将它返回给消费者,那么使用Dto代替原始类会不会更好?(尽管dto与实际模型相同,但情况并非总是如此)?再次感谢您的回答。 –
@RodneyWormsbecher,使用DTO是应该如何完成的。在你的例子中,你没有使用DTO,因此我建议不要重新创建同一个对象。 – Nkosi