【问题标题】:Can not post to ODataController derived controller but can to APIController derived controller不能发布到 ODataController 派生控制器,但可以发布到 APIController 派生控制器
【发布时间】:2021-08-05 21:17:43
【问题描述】:

使用 .Net Core 5 和 Microsoft.AspNetCore.OData 8.0.1 我创建了一个 OData Web API 端点。

当我的控制器基于 ODataController 并尝试将新记录发布到简单的发布端点时,我发布的对象是空的。如果我将控制器更改为基于 ApiController,则帖子可以正常工作,并且我会得到预期的数据。

public class NoteTypeController : ODataController (or ApiController)
  {
      [EnableQuery(AllowedQueryOptions=AllowedQueryOptions.All)]
      [HttpPost]
      public async Task<ActionResult<NoteType>> Post(NoteType noteType)
        {           
            return Created(noteType); //breakpoint here shows noteType empty 
        }
  }

为什么会这样?

***** 编辑 它似乎与 json 的格式有关。如果一个值没有被引号包围,或者一个值为空/null,那么它将出错。即因为下面的 json 中没有引用“true”,所以它不起作用。

{
  "@odata.type":"MyModel.NoteType",
  "createdBy": "string",
  "modifiedBy": "string",
  "isActive": true,
  "description": "My Description"
}

【问题讨论】:

  • 根据您的编辑,这似乎得到了有效的回答——即,ODataController 对如何反序列化请求更加挑剔,而ApiController 提供了更大的灵活性。如果是这样,我想知道您的编辑是否会更好地作为答案?

标签: c# odata asp.net-core-webapi


【解决方案1】:

ODataController 对发布的 JSon 的格式很挑剔。必须引用非字符串值和空值才能正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 2016-05-28
    • 2012-01-25
    • 2013-12-15
    • 2014-12-17
    相关资源
    最近更新 更多