如何从HttpClient将数组发布到Web api控制器?

时间:2014-01-24 15:40:57

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

在web api控制器中,我有以下方法:

[HttpPost]
public ProcessResultDto Process(int[] IDs)
{
}

我无法更改该签名或dll或任何内容。

我必须创建一个调用该方法的可执行文件。

这是我到目前为止的大致内容:

int[] ids = //...
using (var client = new HttpClient())
{
    var content = // I don't know what goes here.
    var result = cli.PostAsync("/api/Processor/Process", content).Result;
    string resultContent = result.Content.ReadAsStringAsync().Result;
    // Substring(6) because of leading )]}',\n
    var summary = JsonConvert.DeserializeObject<ProcessResultDto>(resultContent.Substring(6));
    return summary;
}

我如何设置内容以便将int数组传递给我的web api控制器

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

int[] ids = new[] {1,2,3,4};
var content = JsonConvert.SerializeObject(new {
   IDs = ids
});

这将创建一个属性为IDs的匿名对象,并将其转换为json。 json看起来像:

{
    IDs: [1,2,3,4]
}

然后,Web API方法会将其绑定到您的模型。

答案 1 :(得分:1)

我使用ServiceStack的JSON序列化器/解串器,因为它们是当前的.Net性能冠军。来自ServiceStack文档

  

任何列表,队列,堆栈,数组,集合,包含自定义可枚举类型的枚举都以与JavaScript数组文字完全相同的方式存储

因此

int[] ids = [1,2,3,4];
var content = TypeSerializer.SerializeToString(new {IDs=ids});