关于C#:将JSON发布请求中的多个复杂参数传递给asp.net WebApi

pass multiple complex arguments in json post request to asp.net WebApi

假设ApiController的动作具有多个参数:

1
2
[HttpPost]
public void AddAddress( Person person, Address address, int simple )

或类似的东西。
现在,我尝试发送内容类型为application/json和json的发布请求,如下所示:

1
2
3
{
  person: {...}, address: {..}, simple: 1
}

只是假设它是有效的json;)

或像这样的json数组中:
[person, address, simple]

但是WebApi无法识别这一点,并告诉我它找不到操作,因为它不支持json请求中的多个参数。

我正在使用HttpClient从C#客户端执行此操作,我们希望使用json进行发布请求。我想使用WebApi.Client软件包,该软件包提供了HttpClient的几个有用扩展,但是我们有一个可移植的库项目(webapi客户端不支持)。

我将如何支持该功能?

我试图使用一个自定义的ActionFilter,因为它事先找不到动作,所以它永远不会运行。我尝试了不知道上下文和参数的MediaTypeFormatter,还尝试了ModelBinder,它似乎也仅基于每个参数并且并不总是被执行。

谢谢!


ASP.NET Web API中带有格式化程序的内置参数绑定策略仅支持映射到请求正文的单个复杂参数。 在您的情况下,您尝试映射至少两个复杂的参数。 不扩展此基础结构的最简单解决方案是创建一个包含这些参数作为属性的新模型类。

1
2
3
4
5
6
public class AddressModel
{
  public Person Person { get; set; }
  public Address Address { get; set; }
  public int Simple { get; set; }
}

并在控制器动作中使用该模型

1
public void AddAddress( AddressModel model );