gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:00:31 25 4
gpt4 key购买 nike

我在使用 .Net Core 开发 restful 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}");
}

其中实体有一个 id 和一个名称,使用这个客户端方法 ...

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"));

对象到达带有值 0 (ID) 和 null (name) 的 webapi,除非 webapi 方法签名使用 [FromBody] 注释。我在这里错过了什么吗?我已经进行了研究,但无法弄清楚这一点。

更新:

这是我的实体类:

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

最佳答案

随着 MVC 和 Web Api Controller 合并在一起,asp.net core 与以前的版本发生了 split /变化。

asp.net core 中的默认行为,对于 POST 请求,它将使用表单数据 (x-www-form-urlencoded) 在请求正文中查找数据。如果你想从 body json 中找到 appliction/json,你必须明确。

此链接可能会帮助您了解详细信息: https://andrewlock.net/model-binding-json-posts-in-asp-net-core/

关于c# - 在 ASP.NET Core 中发布复杂类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45375713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com