使用 POSTMAN 客户端的 C# web API POST JSON 数据在 FromBody 中始终为 NULL

标签 c# json asp.net-web-api http-post postman

我有一个包含模型的 Web Api -

 public class Assessments
{
    public List<AssessmentResult> Results { get; set; }
}

public class AssessmentResult
{
    public int? AssessorId { get; set; }
    public int? AssessmentId { get; set; }
    public int? CentreId { get; set; }
    public int? BatchId { get; set; }
    public DateTime AssessmentDate { get; set; }

和 Controller -

[HttpPost]
    [ActionName("SetAssessmentResults")]
    public HttpResponseMessage SetAssessmentResults([FromBody] Assessments assessments)
    {
        try
        {

            string sproc = ConfigurationManager.AppSettings["ASSESSORAPP_InsertAssessmentsStaging"];
            //_dt = Helper.ToDataTable(assessments); use this if sending list doesnt work

            Mapper.Initialize(cfg =>
            {
                //cfg.CreateMissingTypeMaps = false;
                cfg.CreateMap<AssessmentResult, AssessmentTable>().IgnoreAllNonExisting();

                //cfg.IgnoreUnmapped();
            });
            List<AssessmentTable> assessmentTable = Mapper.Map<List<AssessmentResult>, List<AssessmentTable>>(assessments.Results);
            Mapper.Configuration.AssertConfigurationIsValid();

            string isSuccess = _db.InsertAssessmentResults(sproc, assessmentTable);
            if (isSuccess.Split('$')[0].ToLower() == "success")
            {
                return Request.CreateResponse(HttpStatusCode.OK, isSuccess);
            }
            else if (isSuccess.Split('$')[0].ToLower() == "duplicate")
            {
                return Request.CreateResponse(HttpStatusCode.OK, isSuccess);
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.OK, isSuccess);
            }
        }
        catch (Exception ex)
        {
            return Request.CreateResponse(HttpStatusCode.InternalServerError, ex);
        }
    }

客户端,我使用的是 Postman Chrome 扩展程序。 我正在发送正文中包含 JSON 数据的 POST 请求。但是,我没有在 Controller 中获取 JSON 数据(评估对象始终显示 NULL 值)

assessments object showing NULL value

在客户端,我请求使用 PostMan Chrome 扩展

PostMan Client sending request

这是我的 JSON 数据:

    {
"assessment":
[{
      "AssessorId": 3,
      "AssessmentId": 123,
      "CentreId": 1,
      "BatchId": null,
      "AssessmentDate": "2016-09-30T00:00:00",

    },{
     "AssessorId": 2,
      "AssessmentId": 123,
      "CentreId": 1,
      "BatchId": null,
      "AssessmentDate": "2016-09-30T00:00:00",
    }]
    }

我还添加了 Content-Type : application/json

请帮我解决这个问题。谢谢!

最佳答案

在您的类(class)Assessments中,您将包含 AssessmentResult 列表的属性命名为“Results”,但是当您发送帖子时,您将属性命名为“assessment "它应该是 "Results"(考虑到您有默认的序列化程序配置,例如:序列化时没有属性名称到小驼峰大小写)

尝试:

  {
     "Results":[{
                 "AssessorId": 3,
                 "AssessmentId": 123,
                 "CentreId": 1,
                 "BatchId": null,
                 "AssessmentDate": "2016-09-30T00:00:00",

               },
               {
                 "AssessorId": 2,
                 "AssessmentId": 123,
                 "CentreId": 1,
                 "BatchId": null,
                 "AssessmentDate": "2016-09-30T00:00:00",
               }]
 }

另外,作为一种好的做法,您应该在类的构造函数中实例化列表 例如:

public class Assessments
{
    public Assessments()
    {
         Results = new List<AssessmentResult>();
    }
    public List<AssessmentResult> Results { get; set; }
}

关于使用 POSTMAN 客户端的 C# web API POST JSON 数据在 FromBody 中始终为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39748574/

相关文章:

C#,将字符串编码/解码为一些带有校验和的简单代码

json - 在Hive中将时间戳转换为Hive格式时出错

java - 在不使用唤醒锁的情况下每 30 分钟运行一次服务

javascript - Breezejs angularjs 中的双重麻烦

c# - 您如何从 GPS 坐标中获取国家/州/地区/城市/州/ zip /邮政?

c# - 在 ASP.NET WEB API Controller 中,所有方法都充当 HTTP 动词(Get、Put、Post 和 Delete)

android - 如何通过 Android 应用更新/修改现有实体(在 Google 应用引擎上存储为 JSON 对象)

rest - 调用 webapi 方法给出 404

c# - 多条路由时使用查询字符串路由属性路由

c# - 在 using 子句的上下文中对空引用调用方法可以吗?