代码之家  ›  专栏  ›  技术社区  ›  Bastien Vandamme

如何使用异步等待实现OData核心?

  •  1
  • Bastien Vandamme  · 技术社区  · 7 年前

    我正在为一个个人项目实施OData。现在我有了这个密码

        [HttpPost]
        [ODataRoute("Classes", RouteName = "PostClass")]
        public IActionResult PostClass([FromBody] Class @class)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            @class.Id = Guid.NewGuid();
            _context.Classes.Add(@class);
            _context.SaveChangesAsync();
    
            //return CreatedAtAction("GetClass", new { id = @class.Id }, @class);
            return Created(@class);
        }
    

        [HttpPost]
        [ODataRoute("Classes", RouteName = "PostClass")]
        public async Task<ActionResult<Class>> PostClass([FromBody] Class @class)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            @class.Id = Guid.NewGuid();
            _context.Classes.Add(@class);
            await _context.SaveChangesAsync();
    
            return CreatedAtAction("GetClass", new { id = @class.Id }, @class);
            //return Created(@class);
        }
    

    具有

        [HttpPost]
        [ODataRoute("Classes", RouteName = "PostClass")]
        public async Task<ActionResult<Class>> PostClass([FromBody] Class @class)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            @class.Id = Guid.NewGuid();
            _context.Classes.Add(@class);
            await _context.SaveChangesAsync();
    
            //return CreatedAtAction("GetClass", new { id = @class.Id }, @class);
            return Created(@class);
        }
    

    代码无法生成,因为

    错误CS0029无法隐式转换类型 到 'Microsoft.AspNetCore.Mvc.ActionResult'Oyg.Api C:\Users\Public\Projects\Oyg server\Api\Controllers\ClassesController.cs 96处于活动状态

    1 回复  |  直到 7 年前
        1
  •  1
  •   itminus    7 年前

    那是因为 CreatedODataResult Created<TEntity>(entity) method 不是ActionResult的子类,而是 implements the IActionResult interface

    public class CreatedODataResult<T> : IActionResult
    {
        // ...
    }
    

    要修复代码,只需更改 Task<ActionResult<Class>> 成为 Task<IActionResult>

        [HttpPost]
        [ODataRoute("Classes", RouteName = "PostClass")]
        public async Task<IActionResult> PostClass([FromBody] Class @class)
        {
            // ...
            return Created(@class);
        }