我需要使用两个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 Core和Pass a list of complex object in query string to WEB API 线程,但没有帮助我。
这似乎是一种有点奇怪的方式来传递此数据(为什么不仅仅是一长串它们都是相同的对象类型?)。话虽如此,您首先需要更正您的属性。该属性是“ [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上进行了测试,并且工作正常。