在ASP.NET Core中发布复杂类型

时间:2017-07-28 14:13:54

标签: c# rest asp.net-core

我在使用.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

3 个答案:

答案 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]