OData .NET Основной вопрос о Task и ActionResult - PullRequest
0 голосов
/ 06 февраля 2019

Вот весь код моего класса контроллера для управления классами (на самом деле, класс, извините за путаницу)

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);
    }
}
}

Microsoftдокументация по OData Task , но это для OData .NET Standard, я думаю.А как насчет .NET Core и OData Core?И, главный вопрос, какую ссылку я должен добавить, чтобы использовать IHttpActionResult?Согласно другому прочтению я должен добавить пакет Microsoft.AspNet.WebApi.Core .В самом деле?Но у меня есть некоторые сомнения, потому что, когда я добавляю его в свое решение, я получаю конфликт разрешения с

Код серьезности Описание Проект Подавление строки файла Состояние Предупреждение 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 голосов
/ 06 февраля 2019

какую ссылку я должен добавить, чтобы использовать IHttpActionResult?

Для IHttpActionResult он не существует в разделе .net core odata, вы должны использовать ActionResult<Class>.Для получения дополнительной информации, проверьте Миграция моделей и контроллеров .

Согласно некоторым другим прочтениям, я должен добавить пакет Microsoft.AspNet.WebApi.Core.В самом деле?

Нет, ваш проект является ядром .net, вы не должны ссылаться на Microsoft.AspNet.WebApi.Core, который разрешен с помощью .NETFramework.

При ошибке HttpGet вы должны удалитьSystem.Web.Http.

Для получения более подробной информации о миграции .net odata в .net core odata, проверьте вышеуказанную ссылку.

...