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

C#中如何获取与属性类不匹配的HTTP POST请求体?

解决Web API接收POST JSON时的空引用与数据匹配问题

一、先定位空引用的核心原因

空引用异常通常是JSON与模型类不匹配导致模型绑定失败,最终传入Action的模型对象为null,后续操作时触发异常。先从基础匹配规则排查:

  • 确保模型类的属性名称与JSON键名完全匹配(默认大小写敏感),比如JSON里是"userName",模型类不能写成UserName;
  • 模型类属性必须是public权限且包含get/set方法,示例:
public class RequestModel
{
    public string UserName { get; set; }
    public int? Age { get; set; } // 可选字段用可空类型
}
  • 嵌套类型需保持结构一致,嵌套类同样满足上述访问权限要求。

二、绕过模型绑定,直接读取原始JSON

如果模型绑定始终失败,可以直接读取请求的原始JSON内容,手动解析:

ASP.NET Core 版本

[HttpPost]
public async Task<IActionResult> ReceiveData()
{
    using var streamReader = new StreamReader(Request.Body);
    string rawJson = await streamReader.ReadToEndAsync();
    // 用System.Text.Json手动解析
    var model = JsonSerializer.Deserialize<RequestModel>(rawJson);
    // 后续业务逻辑
    return Ok(model);
}

老版ASP.NET Web API 版本

public async Task<IHttpActionResult> ReceiveData()
{
    string rawJson = await Request.Content.ReadAsStringAsync();
    var model = Newtonsoft.Json.JsonConvert.DeserializeObject<RequestModel>(rawJson);
    return Ok(model);
}

三、调试模型绑定失败细节

在Action中添加模型状态验证,直接输出绑定错误:

[HttpPost]
public IActionResult ReceiveData(RequestModel model)
{
    if (!ModelState.IsValid)
    {
        var errorMessages = ModelState
            .SelectMany(x => x.Value.Errors)
            .Select(e => e.ErrorMessage);
        return BadRequest(errorMessages);
    }
    // 后续逻辑
}

同时检查请求的Content-Type是否为application/json,非JSON类型的请求会直接导致模型绑定失败。

四、配置全局JSON序列化规则(ASP.NET Core)

如果JSON与模型存在驼峰/大驼峰命名差异,可全局配置序列化选项,自动适配:

// Program.cs 中添加
builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 允许属性名称不区分大小写匹配
        options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
        // 自动将模型PascalCase属性映射到JSON驼峰键名
        options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
    });

内容的提问来源于stack exchange,提问作者Sapnandu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:05:23