C# MVC5 WebApi 2创建未从正文中获取值([FromBody])
我创建了一个简单的CreateWebAPI2操作,该操作将从帖子主体获取一个对象,然后将其设置到DAL层。然而,无论我如何使用postman将对象放入方法中,它始终保持为null 模型如下所示:C# MVC5 WebApi 2创建未从正文中获取值([FromBody]),c#,asp.net-mvc,asp.net-web-api2,C#,Asp.net Mvc,Asp.net Web Api2,我创建了一个简单的CreateWebAPI2操作,该操作将从帖子主体获取一个对象,然后将其设置到DAL层。然而,无论我如何使用postman将对象放入方法中,它始终保持为null 模型如下所示: namespace WebApi.Models { using System; using System.Collections.Generic; public partial class Classes { public int Id { get; s
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) {
//...
}
应该是这样的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);
}
这很有效,我想我认为使用完整对象太复杂了。不过,关于DTO,我还有另一个问题。我将使用它将其返回给使用者,使用Dto而不是原始类不是更好吗(尽管这里的Dto与实际模型相同,但情况并非总是如此)?再次感谢您的回答。@Rodneywormbecher,应该使用DTO。在您的示例中,您没有使用DTO,因此我建议不要重新创建同一对象。