【问题标题】:WEB API2 getting POST request JSON array valuesWEB API2 获取 POST 请求 JSON 数组值
【发布时间】:2018-04-20 15:04:23
【问题描述】:

我是 WEB API2 和 JSON 的新手。我有一个这样的 JSON 正文

{
  "Input_data": {
     "method": "check",
     "hashcode": " xxxxxx ",
     "accountId": "11111111",
  }
}

如何从 POST 请求中检索值?

我有这样的模型

 [JsonArray]
 public class BaseInput
 {       
    [JsonProperty(PropertyName = "method")]
    public  string Method { get; set; }

    [JsonProperty(PropertyName = "hashcode")]
    public string hashCode { get; set; }

    [JsonProperty(PropertyName = "accountid")]
    public int accountId { get; set; }
}

还有这样的控制器代码

BaseOutput ApiReqeust(int partnerId,[FromBody] BaseInput Input_data)

Input_data 始终为空。

我做错了什么?

【问题讨论】:

  • 你能显示你用来访问 API 控制器的 URL 吗?
  • 您能解释一下 URL 的哪一部分与 partnerId 值对齐吗?并且可能发布您的方法的路线配置。
  • 为什么属性[JsonArray]?您的模型类看起来根本不像一个数组。不知道是不是导致了这个问题,但即使是无关的,我还是觉得很奇怪。
  • 整数部分 {1} 与 partnerId 对齐

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


【解决方案1】:

您对该 JSON 输入使用了错误的模型

这更符合您的 JSON 模型

public class InputData {
    [JsonProperty("method")]
    public string method { get; set; }

    [JsonProperty("hashcode")]
    public string hashcode { get; set; }

    [JsonProperty("accountId")]
    public string accountId { get; set; }
}

public class BaseInput {
    [JsonProperty("Input_data")]
    public InputData Input_data { get; set; }
}

控制器代码看起来没问题。

【讨论】:

    【解决方案2】:

    除了@Nkosi 提到的匹配参数名称问题之外,我相信您的 JSON 参数与控制器声明一致还有另一个问题。将 JSON 有效负载传递给 API 控制器时,内置于 WEB API 中的模型绑定不会将 BaseInput Input_data 识别为预期值。考虑到这一点,您的 JSON 应如下所示:

    {
        "method": "check",
        "hashcode": " xxxxxx ",
        "accountId": "11111111"
    }
    

    另外,对于 POST 方法,最好不要在控制器的参数列表中使用 URL 变量。您可以在其余 JSON 数据中包含所需的任何变量。所以你的控制器看起来像这样:

    BaseOutput ApiReqeust(BaseInput Input_data)
    

    您的BaseInput 模型如下所示:

    public class BaseInput
    {       
        [JsonProperty(PropertyName = "partnerId")]
        public  int partnerId { get; set; }
    
        [JsonProperty(PropertyName = "method")]
        public  string method { get; set; }
    
        [JsonProperty(PropertyName = "hashcode")]
        public string hashCode { get; set; }
    
        [JsonProperty(PropertyName = "accountid")]
        public int accountId { get; set; }
    }
    

    您的 JSON 数据最终将如下所示:

    {
        "partnerId": 1,
        "method": "check",
        "hashcode": " xxxxxx ",
        "accountId": "11111111"
    }
    

    我也同意 cmets 的观点,即您不需要 [JsonArray] 属性,因为您没有传递任何数组。

    【讨论】:

      猜你喜欢
      • 2018-11-14
      • 2020-10-25
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多