我有一个端点,该端点的参数为整数数组类型。我想从body作为json字符串发送一些值。尝试时,我从参数中获取了空值,所以我尝试从url发送整数数组但是发生有关网址长度的问题,所以我想知道可以从请求正文发送它,或者如何解决5.000项目的网址长度问题
我尝试过的请求正文
{
"Ids": [349]
}
端点功能
[HttpGet]
public void GetModels([FromBody]List<int> Ids)
{
}
答案 0 :(得分:1)
首先,通常通常不认为在GET请求中包含主体是非常RESTful的。 RFC不再专门“禁止”它,但是这不是典型的。也就是说,您可以使用[FromBody]属性在ASP.Net Core中完成这项工作。
问题与您格式化JSON正文的方式有关。使用上面列出的GetModels的签名,JSON主体与参数不匹配。您的JSON表示一个具有ID属性的顶级对象,该ID是一个int数组,而不仅仅是一个int数组(或List)。
如果您想使用public void GetModels([FromBody]List<int> Ids)
,那么您的JSON主体应该只是一个数组(例如[349,350,351]
),而不能是其他任何内容(没有方括号,没有“ Ids”属性名称)。
如果要使用上面列出的JSON主体,则需要另一个类用于DTO,以进行模型绑定。该DTO看起来像:
public class IdDto
{
public List<int> Ids { get; set; }
}
,然后您的GetModels方法将如下所示:
[HttpGet] public void GetModels([FromBody] IdDto idDto) { var myIds = idDto.Ids; }
最后,请确保您的GET请求将Content-Type设置为application/json
,否则ASP.Net将返回415“不支持的媒体类型”。