具有多个参数的API HttpGet方法

问题描述 投票:0回答:1

我需要使用两个List参数创建一个HttpGet方法,但出现此错误:

具有多个从请求正文指定或推断为绑定的参数。每个动作只能绑定一个参数。检查以下参数,并使用'FromQueryAttribute'指定来自查询的绑定,'FromRouteAttribute'指定从路由的绑定,以及'FromBodyAttribute'指定从body绑定的参数:

MyObject具有两个属性:

public class MyObject
{
    public int Prop1 { get; set; }
    public int Prop2 { get; set; }
}

我尝试在上面抛出异常的事物

方法1

[HttpGet]
public IActionResult Get(List<MyObject> obj1, List<MyObject> obj2)

方法2

[HttpGet]
[Route("{obj1}/{obj2")]
public IActionResult Get(List<MyObject> obj1, List<MyObject> obj2)

方法3

[HttpGet("{obj1}/{obj2")]
public IActionResult Get(List<MyObject> obj1, List<MyObject> obj2)

使用FromQueryAttribute

我尝试使用:

[HttpGet]
public IActionResult Get([FromQueryAttribute] List<MyObject> obj1, [FromQueryAttribute] List<MyObject> obj2)

并且它不会引发异常,但是我不知道如何通过查询属性传递这些参数?

提前感谢

ps.s。我找到了How to pass multiple parameters to a get method in ASP.NET CorePass a list of complex object in query string to WEB API 线程,但没有帮助我。

asp.net-core asp.net-web-api asp.net-web-api-routing
1个回答
0
投票

这似乎是一种有点奇怪的方式来传递此数据(为什么不仅仅是一长串它们都是相同的对象类型?)。话虽如此,您首先需要更正您的属性。该属性是“ [FromQuery]”,它来自“ FromQueryAttribute”类。您在实际使用属性时不包括“属性”部分。

所以控制器是:

[HttpGet]
public IActionResult Get([FromQuery] List<MyObject> obj1, [FromQuery] List<MyObject> obj2) {}

然后,您需要形成查询字符串参数以实际匹配此结构。查询字符串类似于:

https://localhost:44315/api/test?obj1[0].Prop1=1&obj1[0].Prop2=2&obj2[0].Prop1=3&obj2[0].Prop2=4

这会在Get方法中创建一个obj1参数对象,并且列表中有一个项目,并且第一个项目(零索引)的Prop1值为1,Prop2值为2。它还会在其中创建一个obj2项目列表,Prop1值为3,Prop2值为4。

我在ASP.Net CORE 3.1 API上进行了测试,并且工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.