WEB API2新手求教:如何获取POST请求JSON体中的参数值?
从Web API2的POST请求中获取JSON参数值
嘿,刚接触Web API2和JSON的话,别担心,这事儿其实挺简单的!我来一步步给你讲清楚怎么搞定,顺便先帮你揪出模型里的两个小坑——这俩要是不改,参数可能绑不上哦。
第一步:修正你的模型
先看你的JSON请求体:
{ "Input_data": { "method": "check", "hashcode": " xxxxxx ", "accountId": "11111111" } }
还有你定义的模型,这里有两个关键问题:
- JSON里的
accountId是大写D,但你模型里的JsonProperty(PropertyName = "accountid")是小写d,大小写不匹配会导致绑定失败; - JSON里的
accountId是字符串类型,但模型里定义的是int——虽然"11111111"能转成int,但如果后续有非数字的账号ID,会直接报错,建议根据实际业务调整类型。
另外,你加的[JsonArray]属性也不需要,因为请求体是单个对象,不是数组。
还有个容易忽略的点:你的JSON外层有个Input_data节点,所以必须加个外层模型来包裹BaseInput,不然Web API没法正确绑定。
修正后的完整模型如下:
// 外层模型,对应JSON里的Input_data节点 public class RequestWrapper { [JsonProperty(PropertyName = "Input_data")] public BaseInput InputData { get; set; } } public class BaseInput { [JsonProperty(PropertyName = "method")] public string Method { get; set; } [JsonProperty(PropertyName = "hashcode")] public string HashCode { get; set; } // 首字母大写更符合C#命名惯例 [JsonProperty(PropertyName = "accountId")] // 和JSON里的键完全匹配 public int AccountId { get; set; } // 如果账号ID可能包含非数字,改成string类型:public string AccountId { get; set; } }
第二步:两种获取参数的方法
方法一:自动模型绑定(最常用,推荐)
Web API会自动用Json.NET把请求的JSON序列化为你定义的模型对象,直接在控制器方法里用模型作为参数就行:
public class YourApiController : ApiController { [HttpPost] public IHttpActionResult CheckAccount(RequestWrapper request) { // 直接从模型里取参数 string method = request.InputData.Method; string hashCode = request.InputData.HashCode; int accountId = request.InputData.AccountId; // 这里就可以写你的业务逻辑啦,比如验证hashcode或者账号合法性 return Ok($"获取到的参数:method={method}, accountId={accountId}"); } }
这样请求过来后,Web API会自动帮你把JSON内容填充到request对象里,直接用就行,非常省心。
方法二:手动读取请求内容(特殊场景用)
如果因为某些原因需要手动处理JSON内容,可以直接读取请求的字符串,再手动反序列化:
public class YourApiController : ApiController { [HttpPost] public async Task<IHttpActionResult> CheckAccount() { // 先读取请求的JSON字符串 string jsonContent = await Request.Content.ReadAsStringAsync(); // 手动反序列化为RequestWrapper对象 RequestWrapper request = JsonConvert.DeserializeObject<RequestWrapper>(jsonContent); // 同样可以获取参数 string method = request.InputData.Method; // ...其他参数处理逻辑 return Ok(); } }
这种方法适合需要对JSON内容做额外预处理的场景,比如先验证JSON格式再绑定。
最后再啰嗦两句
- 确保请求的
Content-Type是application/json,不然Web API没法正确识别JSON内容; - 模型里的
JsonProperty属性必须和JSON里的键完全匹配(包括大小写),不然对应的值会是null或者类型默认值; - 如果JSON里的
accountId可能不是纯数字,记得把模型里的AccountId改成string类型,避免反序列化报错。
内容的提问来源于stack exchange,提问作者So_oP
相关产品推荐
相关产品推荐

