c# - WebApi复杂类型uri/获取多个参数

标签 c# asp.net-web-api http-get asp.net-web-api-routing

我正在开发 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/

相关文章:

c# - 如何使用 moq 对在 .NET 中使用 asmx 服务的应用程序进行单元测试

asp.net - 通过 WSS 连接时无法创建 SSL/TLS 安全通道,仅在 Azure 上

javascript - 如果 DurandalJS URL 无效,则不会重置

c# - 代码花费大部分时间的地方

c# - WAP 中的 ProfileCommon 在运行时工作但在编译时不工作

javascript - 使用 AngularJS 发送 HTTP header 请求

javascript - AngularJs - 在准备好之前访问 $scope 变量的代码

android - 在 3g Android 上 httpget 后响应不完整

javascript - WebView2:通过 Javascript 代码在 C# 中设置对象属性

asp.net-web-api - Azure api管理身份验证链接到Web api