【问题标题】:OData .NET Core question about Task and ActionResult关于 Task 和 ActionResult 的 OData .NET Core 问题
【发布时间】:2019-02-06 23:24:48
【问题描述】:

这是我的控制器类管理类的全部代码(实际上是教室,很抱歉造成混乱)

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

【问题讨论】:

    标签: odata asp.net-core-webapi


    【解决方案1】:

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

    对于IHttpActionResult,.net core odata下不存在,应该使用ActionResult&lt;Class&gt;。欲了解更多信息,请查看Migrate models and controllers

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

    不,你的项目是.net core,你不应该引用Microsoft.AspNet.WebApi.Core,它是由.NETFramework解决的。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      相关资源
      最近更新 更多