【问题标题】:Sending dynamic form parameters to WebApi?将动态表单参数发送到 WebApi?
【发布时间】:2020-03-11 06:46:04
【问题描述】:

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

但是没有成功

问题:

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

注意:

  • 我不想为每个组合创建类持有者...
  • 我不想发送 JSON。我说的是纯postx-www-form-urlencoded
  • 我已经知道 webapi 不支持带有多个 [FromBody] 参数的 nativly

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 你让我想了解整个 System.Net.Http 命名空间:-)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 2019-09-15
      • 1970-01-01
      相关资源
      最近更新 更多