【问题标题】:Web API Controller model returns nullWeb API 控制器模型返回 null
【发布时间】:2023-03-13 17:29:01
【问题描述】:

当我将 Web API 控制器与 FROMBody 一起使用时,模型总是返回 null

Product 对象的模型如下:ProductID 和 List of Order 对象:

public class ProductModel
{
    [Required]
    public string productID { get; set; }
    [Required]
    public List<Order> order { get; set; }

}
public class Order
{
    public string orderId { get; set; }
    public string name { get; set; }
}

public IHttpActionResult PostProduct([FromBody]ProductModel model)
{
    var jsonContent = new JavaScriptSerializer().Serialize(model);
}

以下 POSTMAN 中使用的 JSON 示例。请注意,当通过 1 个订单传入产品时,我没有用方括号 [] 将订单对象括起来,这是因为最终系统消耗控制器总是在没有 [] 的情况下传入单个产品。

调试时,Order 始终为空。只要我用[] 括住Order 对象,它就可以正常工作。

{
    "productID":"1",
    "order":{
        "orderId":"1-88",
        "name":"Shoe"
        }
}

是否可以使用上述 JSON 设置模型来处理单产品和多产品两种情况。

我在尝试一些不可能的事情吗?

【问题讨论】:

    标签: c# json asp.net-web-api model controller


    【解决方案1】:

    对于订单列表不带括号总是为空的问题, 您可以将 setter 设为私有的集合并返回一个新的初始化列表(如果它为空)吗?或者您可以编写一个默认构造函数来初始化您的订单列表。

    见:WebAPI 2 not deserializing List<string> property of FromBody object in POST request

    您也可以尝试删除 FromBody 以绑定到复杂类型。对于一个或多个产品模型的自定义处理,请尝试创建自定义模型绑定器。

    【讨论】:

      猜你喜欢
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多