You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WEB API2新手求教:如何获取POST请求JSON体中的参数值?

从Web API2的POST请求中获取JSON参数值

嘿,刚接触Web API2和JSON的话,别担心,这事儿其实挺简单的!我来一步步给你讲清楚怎么搞定,顺便先帮你揪出模型里的两个小坑——这俩要是不改,参数可能绑不上哦。

第一步:修正你的模型

先看你的JSON请求体:

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

还有你定义的模型,这里有两个关键问题:

  1. JSON里的accountId是大写D,但你模型里的JsonProperty(PropertyName = "accountid")是小写d,大小写不匹配会导致绑定失败;
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:28:28