如何在ASP.NET Core Webapi

时间:2019-03-27 14:19:25

标签: asp.net-core-webapi

我有一个端点,该端点的参数为整数数组类型。我想从body作为json字符串发送一些值。尝试时,我从参数中获取了空值,所以我尝试从url发送整数数组但是发生有关网址长度的问题,所以我想知道可以从请求正文发送它,或者如何解决5.000项目的网址长度问题

我尝试过的请求正文

{
  "Ids": [349]
}

端点功能

[HttpGet]
public void GetModels([FromBody]List<int> Ids)
{
}

1 个答案:

答案 0 :(得分:1)

首先,通常通常不认为在GET请求中包含主体是非常RESTful的。 RFC不再专门“禁止”它,但是这不是典型的。也就是说,您可以使用[FromBody]属性在ASP.Net Core中完成这项工作。

问题与您格式化JSON正文的方式有关。使用上面列出的GetModels的签名,JSON主体与参数不匹配。您的JSON表示一个具有ID属性的顶级对象,该ID是一个i​​nt数组,而不仅仅是一个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“不支持的媒体类型”。