【问题标题】:POST Method In C# Web API Recieves Null Model When Enum Is Provided提供枚举时,C# Web API 中的 POST 方法接收 Null 模型
【发布时间】:2021-01-03 12:17:22
【问题描述】:

我正在尝试通过这个模型:

public class EquipmentRequestModel
{
    public int PackingBenchNo { get; set; }
    public PackingMaterial Equipment { get; set; }
}

public enum PackingMaterial
{
    Bubblewrap,
    Envelopes,
    InvoicePaper,
    Pen
}

进入如下方法:

[HttpPost]
public IActionResult RequestEquipment(EquipmentRequestModel equipmentRequest)

但是,当我通过邮递员发送此请求时:

{
    "PackingBenchNo" : 1,
    "Equipment" : "Bubblewrap"
}

通过该方法接收到的数据是null。如果我使用枚举值的数字表示,模型会传递数据。但是,如果可能的话,我想使用字符串表示来提高可读性。

【问题讨论】:

  • 您使用的是 .Net Core 还是 Framework?如果是 Core,您使用的是 Newtonsoft 还是 System.Text.Json?
  • 我正在使用 .NET Core 和 Newtonsoft

标签: c# json rest asp.net-web-api postman


【解决方案1】:

这个回复对于评论来说太长了,即使这在技术上可能不是一个答案。

我通过创建一个新的 Asp.Net Core 3.1 API 项目(在 VS 2019 中)重新创建了您的情况,并且它按预期工作。我添加了您的 EquipmentRequestModel 和枚举,然后将 RequestEquipment 添加到由默认模板创建的默认 WeatherForecastController。

我为 DI 添加了 Newtonsoft.Json 12.0.3(最新)和 Microsoft.AspNetCore.Mvc.NewtonsoftJson。我在 Startup.cs 的 AddControllers 调用中添加了 AddNewtonsoftJson()。

我使用 Postman 发布了您的有效负载,但它不为空。我尝试了一个字符串和一个整数,两次模型都没有问题地通过 RequestEquipment 方法。

{
    "PackingBenchNo" : 1,
    "Equipment" : "Bubblewrap"
}    
or
{
    "PackingBenchNo" : 1,
    "Equipment" : 0
}

您是否在启动时为 Netwonsoft 设置了任何可能导致问题的异常选项?您使用的是 Core 3.1 还是旧版本? (或 5 测试版?)

【讨论】:

    猜你喜欢
    • 2019-03-26
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2016-04-10
    相关资源
    最近更新 更多