将动态表单参数发送到WebApi吗?

问题描述 投票:2回答:2

我正在使用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);
    }

但是没有成功

问题:

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

NB:

  • 我不想为每个组合创建班级持有人...
  • 我不想发送JSON。我说的是纯post x-www-form-urlencoded
  • 我已经知道webapi不自然地支持多个[FromBody]参数
c# asp.net post asp.net-web-api
2个回答
3
投票

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

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.