OData .NET有关Task和ActionResult的核心问题

时间:2019-02-06 08:26:26

标签: odata asp.net-core-webapi

这是我的控制器类用于管理类的全部代码(实际上是教室,对不起,抱歉)

enter image description here

using Microsoft.AspNet.OData;
using Microsoft.AspNet.OData.Routing;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using My.Data;
using My.Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace My.Api.Controllers
{
public class ClassesController : ODataController
{
    private readonly OygContext _context = new OygContext();

    /// <summary>
    /// GET: api/Classes
    /// </summary>
    /// <returns></returns> 
    [HttpGet]
    [EnableQuery]
    [ODataRoute("Classes", RouteName = "GetClasses")]
    public async Task<ActionResult<IEnumerable<Class>>> GetClasses()
    {
        return Ok(await _context.Classes.ToListAsync());
    }


    /// <summary>
    /// GET: api/Classes/5
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    [HttpGet()]
    [ODataRoute("Classes({key})", RouteName = "GetClass")]
    public async Task<ActionResult<Class>> GetClass([FromODataUri] Guid key)
    {
        var @class = await _context.Classes.FindAsync(key);

        if (@class == null)
        {
            return NotFound();
        }

        return Ok(@class);
    }

    /// <summary>
    /// POST: api/Classes
    /// </summary>
    /// <param name="class"></param>
    /// <returns></returns>
    [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);
    }

    /// <summary>
    /// DELETE: api/Classes/5
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    [HttpDelete()]
    [ODataRoute("Classes", RouteName = "DeleteClass")]
    public async Task<ActionResult<Class>> DeleteClass(Guid id)
    {
        var @class = await _context.Classes.FindAsync(id);
        if (@class == null)
        {
            return NotFound();
        }

        _context.Classes.Remove(@class);
        await _context.SaveChangesAsync();

        return Ok(@class);
    }

    private bool ClassExists(Guid id)
    {
        return _context.Classes.Any(e => e.Id == id);
    }
}
}

有关OData的Microsoft文档Task,但我猜这是针对OData .NET Standard的。 .NET Core和OData Core呢?而且,主要问题是,使用IHttpActionResult应该添加哪些参考?根据其他读物I should add Microsoft.AspNet.WebApi.Core package。真?但是我有一个疑问,因为当我将其添加到解决方案中时,就会与

发生解析冲突
  

严重性代码描述项目文件行抑制状态   警告NU1701软件包'Microsoft.AspNet.WebApi.Core 5.2.7'是   使用'.NETFramework,Version = v4.6.1'而非项目还原   目标框架'.NETCoreApp,Version = v2.2'。这个包裹可能不是   与您完全兼容   项目。 Oyg.Api C:\ Users \ Public \ Projects \ oyg-server \ Api \ Oyg.Api.csproj 1

enter image description here

1 个答案:

答案 0 :(得分:1)

  

使用IHttpActionResult应该添加什么参考?

对于IHttpActionResult,它在.net核心odata下不存在,您应该使用ActionResult<Class>。有关更多信息,请检查Migrate models and controllers

  

根据其他阅读,我应该添加Microsoft.AspNet.WebApi.Core程序包。真的吗?

否,您的项目是.net核心,您不应引用Microsoft.AspNet.WebApi.Core所解析的.NETFramework

对于HttpGet错误,应删除System.Web.Http

有关将.net odata迁移到.net核心odata的更多详细信息,请查看上面的链接。