我正在开发 WebApi rest revice 解决方案,并希望将多个复杂类型作为 url 参数传递。 我需要传递两个个人数据对象。个人数据包含 FullName 和 Id。
public class Foo
{
public string FullName { get; set; }
public string Id { get; set; }
}
我期望我可以使用类似于此的 url 调用我的 REST 服务:
http://localhost:53088/values/GetByFoo/?foo1={"FullName":"Name 1","Id":"1"}&foo2={"FullName":"Name 2","Id":"2"}
所以我将 ValuesController.cs 编码成这样:
[HttpGet]
public List<Foo> GetByFoo2([FromUri] Foo foo1, [FromUri] Foo foo2)
{
List<Foo> foos = new List<Foo>();
foos.Add(foo1);
foos.Add(foo2);
return foos;
}
不幸的是 [HttpGet] 方法中的参数总是 NULL
因为它不起作用,我尝试从一个参数开始,这是我目前所取得的成就:
ValuesController.cs
[HttpGet]
public Foo GetByFoo([FromUri] Foo foo)
{
return foo;
}
在这种情况下我只能得到正确的值: /Values/GetByFoo?FullName=NAME1&Id=1
在这种情况下,foo 参数始终为 NULL /values/GetByFoo/?foo={"FullName":"Name 1","Id":"1"}
然后我想到使用一个参数,同时包含 foo1 和 foo2 属性并发出此 get 请求:
/values/GetByFooPair/?foopair={"Foo1":{"FullName":"名称 1","Id":"1"},"Foo2":{"FullName":"名称 2","ID":"2"}}
public class FooPair
{
public Foo Foo1 { get; set; }
public Foo Foo2 { get; set; }
}
但它也不起作用, Controller 方法参数始终为空。
另一方面,如果我使用 HttpPost 方法并使用 jQuery 发出 ajax 请求,参数是正确的并且包含预期值。
[HttpPost]
public FooPair GetByFooPairPost([FromBody] FooPair foopair)
{
return foopair;
}
是否可以通过url传递多个复杂类型参数?
我错过了什么?我做错了什么?
最佳答案
如果要处理复杂的对象,则需要将其更改为 [HttpPost]。
关于c# - WebApi复杂类型uri/获取多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33301302/