WebApi复杂类型uri/获取多个参数
本文关键字:参数 获取 复杂 类型 uri WebApi | 更新日期: 2023-09-27 18:18:54
我正在开发一个WebApi rest建议解决方案,并希望传递多个复杂类型作为url参数。我需要传递两个对象的个人资料。个人数据包含FullName和Id。
public class Foo
{
public string FullName { get; set; }
public string Id { get; set; }
}
我希望我可以调用我的REST服务与url类似:
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;
}
在这种情况下我只能得到正确的值:/价值/GetByFoo ? FullName = NAME1& Id = 1
在这种情况下foo参数总是NULL/价值/GetByFoo/?foo = {" FullName":"1","Id":"1"}
然后我想到使用一个参数,包含foo1和foo2属性,并使此get请求:
/价值/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; }
}
但是它也不工作,控制器方法参数总是null
另一方面,如果我使用HttpPost方法并使用jQuery发出ajax请求,参数是正确的,并且包含预期的值。
[HttpPost]
public FooPair GetByFooPairPost([FromBody] FooPair foopair)
{
return foopair;
}
是否可以通过url传递几个复杂的类型参数?
我错过了什么?我做错了什么?
如果你想处理复杂的对象,你需要把它改成[HttpPost]
你可以这样做:
http://localhost:53088/values/GetByFoo?foo1.fullName=Fullname1&foo1.id=ID1&foo2.fullName=Fullname2&foo2.id=ID2
在。net框架4.5.2下测试WebAPI 2.2 (nuget package version 5.2.3) .
然而,正如Shyju和codeMonkey所指出的,如果对象有一点复杂性,我不会推荐这样做。HttpPost在正文中接受任意数量的内容,而查询字符串的长度是有限的。此外,当使用正文时,您将从Javascript自动序列化为正确的JSON格式,就像这里的比较一样,您必须自己进行序列化。