POST参数为手工类型时为null

时间:2019-08-08 13:48:52

标签: entity-framework asp.net-web-api dto edmx

我有一个asp.net 4.5.2网络api,一个POST方法收到了我手工编写的DTO参数,如下所示:

using System;

namespace WebApi.Models.DTO
{
    [Serializable]
    public class MyModelDto
    {
        public MyModelDto()
        {

        }

        public int Id { get; set; }
        public string Code { get; set; }
        public int Type { get; set; }
    }
}

当我从Postman调用此方法时,参数始终为null,但是如果我在EntityFramewok(edmx模型)中设计相同的DTO类并将其用作参数,则可以在发送后的方法内部接收数据。 我不知道手工课上缺少了什么? 为什么使用EF而不是在我的课堂上可以使用它? 将参数设置为动态也可以...

[HttpPost]
[JwtAuthentication]
[Route("api/bills/invoice")]
public JsonResult<WebApi.Models.DTO.MyModelDto> Post(WebApi.Models.DTO.MyModelDto param)
{
    // Here param is always NULL
}

[HttpPost]
[JwtAuthentication]
[Route("api/bills/invoice")]
public JsonResult<Data.MyModelDto> Post(Data.MyModelDto param)
{
    // Here param wors! based on the EF class
}
public JsonResult<Data.MyModelDto> Post(dynamic param)
{
    // Here param wors! using dynamic data type
}

1 个答案:

答案 0 :(得分:0)

这取决于您如何通过邮递员发送数据。

我没有邮递员在这里进行测试,但是请确保在发送数据时选择“ Json类型”,然后发送的数据需要与DTO匹配。像这样:

{
   "Id":1,
   "Type":"whatever",
   "Code":"whatever"
}

由于您正在发送发布请求,因此该数据将放入请求的正文中。

一个额外的观察,您的DTO不需要空的构造函数,您可以摆脱它。没错:

public class MyModelDto
    {       
        public int Id { get; set; }
        public string Code { get; set; }
        public int Type { get; set; }
    }

出于测试目的,请放弃您的Jwt身份验证,直到您使呼叫正常运行