为了账号安全,请及时绑定邮箱和手机立即绑定

Asp.net Core 2 API POST对象是否为NULL?

/ 猿问

Asp.net Core 2 API POST对象是否为NULL?

慕莱坞7535251 2019-10-22 21:35:10

我有一个带有某些测试功能的.net Core 2 API设置。(Visual Studio 2017)


使用邮递员,我将原始数据发布到该方法,但是模型只是空白?为什么?


        // POST api/Product/test

        [HttpPost]

        [Route("test")]

        public object test(MyTestModel model)

        {

            try

            {

                var a = model.SomeTestParam;


                return Ok("Yey");

            }

            catch (Exception ex)

            {

                return BadRequest(new { message = ex.Message });

            }

        }


        public class MyTestModel

        {

            public int SomeTestParam { get; set; }


        }

http://img1.mukewang.com/5daf05ac000118b304620246.jpg

http://img3.mukewang.com/5daf05af0001f4a408140387.jpg

查看完整描述

2 回答

?
慕娘9325324

您需要[FromBody在模型上包含[ ]属性:


[FromBody] MyTestModel model

有关更多信息,请参见Andrew Lock的帖子:


为了在ASP.NET Core中正确绑定JSON,必须修改操作以[FromBody]在参数上包含属性。这告诉框架使用请求的内容类型标头来决定将哪个配置的IInputFormatter用于模型绑定。


正如@anserk在评论中指出的那样,这还要求将Content-Type标头设置为application/json。


查看完整回答
反对 回复 2019-10-22
?
慕村225694

要将更多信息添加到接受的答案中:


无需使用属性即可自动绑定参数的三个来源:


表单值:这些是使用POST方法在HTTP请求中输入的表单值。(包括jQuery POST请求)。


路由值:路由提供的一组路由值


查询字符串:URI的查询字符串部分。


请注意,这Body不是其中之一(尽管我认为应该是)。


因此,如果您有需要从主体绑定的值,则必须使用属性binding属性。


昨天,这让我不寒而栗,因为我认为来自Body的参数将被自动绑定。


第二个要点是,只能将一个参数绑定到主体。


用[FromBody]装饰的每个动作最多可以有一个参数。ASP.NET Core MVC运行时将读取请求流的责任委托给格式化程序。读取请求流中的参数后,通常无法再次读取请求流以绑定其他[FromBody]参数。


因此,如果需要多个参数,则需要创建一个Model类来绑定它们:


public class InputModel{

   public string FirstName{get;set;}

   public string LastName{get;set;}

}


[HttpPost]

public IActionResult test([FromBody]InputModel model)...



查看完整回答
反对 回复 2019-10-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信