【问题标题】:Model is null when the endpoint is hit via postman当端点通过邮递员命中时模型为空
【发布时间】:2019-06-20 04:59:11
【问题描述】:

我通过邮递员传递的数据似乎与控制器方法中的模型不匹配。 我在 .Net 应用程序中实现 web api 端点,以同时处理多个文件上传的保存。用户可以选择多个文件,并且对于每个文件,他可以选择文档类型和日期。记录插入到两个表(父表和子表) 我的示例中的父表是 DOCUMENT 表,子记录存储在 MANAGERSTRATEGY_DOCUMENT 表中。我的 JSON 结构有什么问题吗

视图模型

 public class DocumentUploadCreateViewModel
    {
        public int ManagerStrategyId { get; set; }
        public List<DocumentUploadCreateDetailsViewModel> DocumentUploadCreateDetailsViewModel = new List<DocumentUploadCreateDetailsViewModel>();
    }


 public class DocumentUploadCreateDetailsViewModel
    {
        public string Name { get; set; }
        public int DocumentTypeId { get; set; }
        public DateTime? DocumentDate { get; set; }
        public byte[] DocumentContent { get; set; }

    }

控制器代码

[HttpPost]
        [SkipTokenAuthorization]
        [Route("api/documentupload/create")]
        public IHttpActionResult Create(DocumentUploadCreateViewModel model)
        {
            var mgrStrategyDocument = new MANAGERSTRATEGY_DOCUMENT();
        var mgrDocumentService = GetService<DOCUMENT>();
        var mgrStrategyDocumentService = GetService<MANAGERSTRATEGY_DOCUMENT>();

        if (model != null)
        {
            foreach (var obj in model.DocumentUploadCreateDetailsViewModel)
            {
                var mgrDocument = new DOCUMENT
                {
                    DOCUMENT_TYPE_ID = obj.DocumentTypeId,
                    DOCUMENT_DATE = obj.DocumentDate,
                    NAME = obj.Name
                };
                mgrDocument = mgrDocumentService.Create(mgrDocument);


                var mangerStrategyDocumentService = GetService<MANAGERSTRATEGY_DOCUMENT>();
                var mgrStrategyDocument1 = new MANAGERSTRATEGY_DOCUMENT()
                {
                    DOCUMENT_ID = mgrDocument.ID,
                    MANAGERSTRATEGY_ID = model.ManagerStrategyId

                };
                mgrStrategyDocument = mgrStrategyDocumentService.Create(mgrStrategyDocument1);
            }

        }
        return Ok(mgrStrategyDocument);

    }
    }

邮递员

http://localhost:56888/api/documentupload/create


JSON

    {
    "ManagerStrategyId" : 5508,

    [
        "Name" : "x2",
        "DocumentTypeId" : 2,
        "DocumentDate" : "15/04/2010",
        "DocumentContent" : [71,107,98]
    ],

        [
        "Name" : "x3",
        "DocumentTypeId" : 3,
        "DocumentDate" : "15/04/2010",
        "DocumentContent" : [71,107,98]
    ],

        [
        "Name" : "x4",
        "DocumentTypeId" : 4,
        "DocumentDate" : "15/04/2010",
        "DocumentContent" : [71,107,98]
    ]
}

【问题讨论】:

  • Controller 的 ModelState 属性中可能记录了一些内容?
  • 抱歉没找到你?
  • 对不起断句!如果那是 WebAPI / MVC 控制器,您将在那里有一个 ModelState 属性,当模型为空时通常会记录一些错误 - docs.microsoft.com/en-us/dotnet/api/…
  • 它的 WEBAPI。我尝试调试 ModelState 并显示 Count: 1 IsReadOnly: false IsValid: false Keys: Count = 1 Values: Count = 1 Results View: Expanding Results View 将枚举 IEnumerable
  • 是的,该列表中的 1 项将是您的错误消息 - 在调试视图中展开可枚举,您会看到它

标签: c# asp.net-web-api


【解决方案1】:

您的 JSON 缺少列表的键,而且列表语法似乎不正确。请尝试以下操作:

{
"ManagerStrategyId":5508,
"DocumentUploadCreateDetailsViewModel":[
  {
     "Name":"x2",
     "DocumentTypeId":2,
     "DocumentDate":"2010-04-15",
     "DocumentContent":[
        71,
        107,
        98
     ]
  },
  {
     "Name":"x3",
     "DocumentTypeId":3,
     "DocumentDate":"2010-04-15",
     "DocumentContent":[
        71,
        107,
        98
     ]
  },
  {
     "Name":"x4",
     "DocumentTypeId":4,
     "DocumentDate":"2010-04-15",
     "DocumentContent":[
        71,
        107,
        98
     ]
  }
]
}

【讨论】:

  • 看起来不错,但 DocumentDate 即将为空。它在模型中的 DateTime 字段
  • @Tom 我假设 DateTime 应该是 ISO 8601 标准:“2012-03-19T07:22Z”格式。我已经用 ISO 格式更新了答案。
猜你喜欢
  • 2019-10-26
  • 1970-01-01
  • 2013-09-28
  • 2016-02-08
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
相关资源
最近更新 更多