WEB API2获取POST请求JSON数组值

时间:2018-04-20 15:04:23

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

我是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始终为空。

我做错了什么?

2 个答案:

答案 0 :(得分:4)

您使用的是错误的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; }
}

控制器代码看起来很好。

答案 1 :(得分:1)

除了@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"
}

我同意您不需要[JsonArray]属性的注释,因为您没有传递任何数组。