我是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
始终为空。
我做错了什么?
答案 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]
属性的注释,因为您没有传递任何数组。