我在使用.Net Core开发一个安静的webapi时遇到了一个问题,我不能使用HTTP POST方法来插入一个复杂类型的对象而不指定参数为" FromBody"。根据Microsoft的文档......
Parameter Binding in ASP.NET Web API
在HTTP POST上使用复杂类型时,我不必指定[FromBody]
数据注释,它应该可以工作,但是当我尝试从webapi中使用该方法时......
// POST api/checker/
[HttpPost]
public int Insert(Entity e)
{
Console.WriteLine($"Entity: {e.ID} - {e.Name}");
}
其中entity具有id和name,使用此客户端方法...
string json = JsonConvert.SerializeObject(entity);
HttpClient client = new HttpClient();
HttpResponseMessage message = await client.PostAsync(
"http://localhost:5000/api/checker",
new StringContent(json, Encoding.UTF8, "application/json"));
除非webapi方法签名使用(ID)
注释,否则对象将使用值(name)
和null [FromBody]
到达webapi。我在这里错过了什么吗?我已经完成了一项研究,无法解决这个问题。
更新
这是我的实体类:
public class Entity
{
public int ID { get; set; }
public bool IsDeleted { get; set; }
public string Name { get; set; }
}
这是使用Newtonsoft的JSON.NET的序列化json:
{"ID":99,"IsDeleted":false,"Name":"TestChecker"}
这是插入web api方法的输出:
Entity: 0
答案 0 :(得分:4)
以前版本的asp.net核心分为/更改为MVC& Web Api控制器合并在一起。
asp.net核心中的默认行为,对于POST请求,它将使用表单数据(x-www-form-urlencoded)查找请求正文中的数据。如果你想从body json中找到appliction / json,你必须明确。
此链接可能会为您提供详细信息: https://andrewlock.net/model-binding-json-posts-in-asp-net-core/
答案 1 :(得分:1)
我认为你会发现你需要.Net Core中的FromBody。看到 Create a Web API with ASP.NET Core... 另见:Model Binding.
答案 2 :(得分:0)
我看到您正在使用操作Insert
但是当您拨打api时,网址是" http://localhost:5000/api/checker"再次使用此网址" http://localhost:5000/api/checker/insert"?也许它会起作用,你不需要[FromBody]
。