将json post请求中的多个复杂参数传递给asp.net WebApi

时间:2012-11-01 12:45:33

标签: c# asp.net json post asp.net-web-api

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

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

或类似的东西。 现在我尝试发送一个内容类型为application/json和json的帖子请求:

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

假设它是有效的json;)

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

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

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

我将如何支持此功能?

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

谢谢!

1 个答案:

答案 0 :(得分:4)

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

public class AddressModel
{
  public Person Person { get; set; }
  public Address Address { get; set; }
  public int Simple { get; set; }
}

在控制器操作中使用该模型

public void AddAddress( AddressModel model );