3

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

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

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

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

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

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

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

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

我将如何支持此功能?

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

谢谢!

4

1 回答 1

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 );
于 2012-11-01T15:25:08.340 回答