将动态表单参数发送到Web Api?

时间:2014-11-19 11:28:27

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

我正在使用WebApi 1(Visual Studio:2010)

在极少数情况下,客户端可以向方法发送可变(动态)数量的参数。 (通过POST动词)

我一直试图通过发送可变数量的参数来测试它:

POST http://.../api/Claims HTTP/1.1
Host: ...
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 13

a=1&b=2&c=4

服务器端:

[HttpPost]
public dynamic NewClaim1([FromBody]  dynamic al)
{
    return Request.CreateResponse(HttpStatusCode.OK, (object)al);
}

但我在回复时得到一个空对象。 (200 OK

尝试#2

我也试过([FromBody] object al)

尝试#3

我也试过(object[] al)

尝试#4

  public class A //using a class holder
    {
        public object[] obj { get; set; }
    }



    [HttpPost]
    public dynamic NewClaim1([FromBody]  A al)
    {
        return Request.CreateResponse(HttpStatusCode.OK, al);
    }

但没有成功

问题:

如何将动态post参数发送到我可以检索这些值的方法。

注意:

  • 我不想为每个组合创建班主任......
  • 我不想发送JSON。我说的是纯post x-www-form-urlencoded
  • 我已经知道webapi并不支持多个[FromBody]参数

2 个答案:

答案 0 :(得分:3)

您可以使用FormDataCollection检索表单值。

public void PostForm(FormDataCollection formdata)
{
    foreach (KeyValuePair<string, string> formEntry in formdata)
    {
        string key = formEntry.Key;
        string value = formEntry.Value;
    }
}

答案 1 :(得分:0)

在一个key: value级对象的情况下,并且在所有属性均为字符串类型的唯一情况下,@ jon的答案可能会有所帮助。否则,提取复杂对象的实现必须比这复杂得多。 我建议使用JObject作为反序列化的一种类型,即由Newtonsoft提供