【问题标题】:.NET Core Web Api Binding Multiple Models.NET Core Web Api 绑定多个模型
【发布时间】:2021-06-30 22:13:57
【问题描述】:

我尝试将两个模型绑定到一个模型中。我的代码没有任何错误,但是当我尝试使用邮递员发布数据时出现错误。

这里,我的第一个模型,我绑定两个模型的模型

public class CModel
    {
        [Key]
        public int id { get; set; }
        public AModel amodelid { get; set; }
        public BModel bmodelid { get; set; }
    }

我的第二个模型

public class AModel
    {
        [Key]
        public int id { get; set; }
        .
        .
        .
    }

我的第三个模型

public class BModel
        {
            [Key]
            public int id { get; set; }
            .
            .
            .
        }

我尝试在 CModel 中获取两个模型 ID 但是当我尝试从邮递员那里发送一个帖子请求时,我收到了这个错误

{
    "errors": {
        "amodelid": [
            "Error converting value 2 to type 'Models.AModel'. Path 'amodelid', line 2, position 17."
        ],
        "bmodelid": [
            "Error converting value 1 to type 'Models.BModel'. Path 'bmodelid', line 3, position 18."
        ]
    },
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
    "title": "One or more validation errors occurred.",
    "status": 400,
}

我和邮递员一起发送的 JSON

{
    "amodelid":2,
    "bmodelid":1
}

以及来自控制器的最后一个代码引用

        [HttpPost("/api/test/")]
        public async Task<ActionResult> SomeTask([FromBody] CModel cModel)
        {
            //result return bool
            var result = await _someService.MoreSomeTask(cModel).ConfigureAwait(false);
            if (result)
            {
                return Ok("OK");
            }
            
            return BadRequest(new { msg = "Please check your request" });
        }

我只发送控制器的代码,因为即使请求也没有到达我的控制器(我尝试在调试模式下运行程序,所以我得到了这个结果)。另外,我在 startup.cs 文件中注册了我的服务。 抱歉,我的问题有点长,但我会尽可能多地解释。 感谢您的帮助。

【问题讨论】:

    标签: .net asp.net-core asp.net-web-api


    【解决方案1】:

    那是因为您的 JSON 不正确。您正在发送:

    {
        "amodelid":2,
        "bmodelid":1
    }
    

    C# 类格式如下:

    public class ActualReceived 
    {
        public int amodelid { get; set; }
        public int bmodelid { get; set; }
    }
    

    但是你在你的 CModel 类中声明了你想要的:

    public class CModel
    {
        [Key]
        public int id { get; set; }
        public AModel amodelid { get; set; }
        public BModel bmodelid { get; set; }
    }
    

    这意味着当您尝试将 "amodelid":2 转换为 AModel amodelid 时它会失败。问题是你的 JSON。由于 AModel 和 BModel 是一个对象,因此您需要为它使用括号。 不是输入 JSON 有括号{...}。这将其标识为一个对象。因此,考虑到这一点,这就是您的 JSON 需要的样子:

    {
        "amodelid" : { "id": 2 },
        "bmodelid" : { "id": 3 }                    
    }
    

    试试看它是否有效。

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 2016-08-16
      • 2018-11-06
      相关资源
      最近更新 更多