【问题标题】:How do I POST an array to a web api controller from an HttpClient?如何从 HttpClient 将数组发布到 Web api 控制器?
【发布时间】:2014-01-25 00:44:31
【问题描述】:

在 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 控制器

【问题讨论】:

  • 也许new StringContent(JsonConvert.SerializeObject(new[] { 1, 2, 3 })); ?

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


【解决方案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 方法会将其绑定到您的模型。

【讨论】:

    【解决方案2】:

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

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

    因此

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

    【讨论】:

      猜你喜欢
      • 2014-11-26
      • 1970-01-01
      • 2013-08-07
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      相关资源
      最近更新 更多