명령줄을 통해 Mac에서 ASP.NET Core 6.0용 OData

OData는 RESTful API를 구축하고 사용하기 위한 모범 사례 모음입니다. ASP.NET Core OData Nuget 패키지는 .NET 애플리케이션에서 OData REST API를 원활하게 개발할 수 있는 기능을 제공합니다.

.NET 6.0에 Program.cs의 새로운 구조가 포함되어 있고 거기에서 몇 가지 문제에 직면했기 때문에 명령줄을 통해 OData 지원을 추가한 방법을 문서화하고 싶습니다.

내가 수행한 단계는 다음과 같습니다.

ASP.NET Core 웹 API 6.0 애플리케이션 만들기




>> dotnet new webapi -o odata
>> cd odata


Entity Framework Core 및 OData 패키지 참조 추가



단순성을 위해 EF Core 메모리 내 데이터베이스 공급자를 사용했습니다.

>> dotnet add package Microsoft.EntityFrameworkCore.InMemory
>> dotnet add package Microsoft.AspNetCore.Odata


Program.cs 업데이트


  • OData 컨벤션 모델
  • OData 컨트롤러
  • 엔티티 프레임워크 컨텍스트

  • using Microsoft.AspNetCore.OData;
    using Microsoft.EntityFrameworkCore;
    using Microsoft.OData.Edm;
    using Microsoft.OData.ModelBuilder;
    using OData.Models;
    
    var builder = WebApplication.CreateBuilder(args);
    
    // Add services to the container.
    
    builder.Services.AddControllers();
    
    builder.Services.AddEndpointsApiExplorer();
    
    // Entity Framework Context
    builder.Services.AddDbContext<ODataContext>(opt => opt.UseInMemoryDatabase("Cars"));
    
    // OData convention model and OData controller
    builder.Services.AddControllers().AddOData(opt => opt.AddRouteComponents("odata", GetEdmModel()).Filter().Select());
    
    var app = builder.Build();
    
    app.UseHttpsRedirection();
    
    app.UseAuthorization();
    
    app.MapControllers();
    
    app.Run();
    
    IEdmModel GetEdmModel()
    {
        var builder = new ODataConventionModelBuilder();
        builder.EntitySet<Car>("Cars");
        return builder.GetEdmModel();
    }
    


    GET 요청에 대한 지원 추가


    EnableQuery 주석을 사용하여 GET 요청CarsController.cs을 활성화합니다. 정적 클래스DataSource를 사용하여 테스트 데이터를 제공합니다. DataSource.GetCars()에 대한 코드는 here에서 찾을 수 있습니다.

    using Microsoft.AspNetCore.OData.Routing.Controllers;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.OData.Query;
    using OData.Models;
    using OData.Data;
    
    namespace OData.Controllers
    {
        public class CarsController : ODataController
        {
            private ODataContext _context;
            private readonly ILogger<CarsController> _logger;
    
            public CarsController(ODataContext context, ILogger<CarsController> logger) {
                _context = context;
                _logger = logger;
    
                if (_context.Cars.Count() == 0)
                {
                    foreach (var b in DataSource.GetCars())
                    {
                        _context.Cars.Add(b);
                    }
                    _context.SaveChanges();
                }
            }
    
    
            [EnableQuery]
            public IActionResult Get()
            {
                return Ok(_context.Cars);
            }
    
            [EnableQuery]
            public IActionResult Get(int key)
            {
                return Ok(_context.Cars.FirstOrDefault(c => c.Id == key));
            }
        }
    }
    


    응용 프로그램을 실행하고 결과를 확인하십시오



    OData가 작동함을 증명하는 좋은 방법은 가격이 50 이하인 모든 자동차를 쿼리하는 것입니다. 해당 조건을 충족하는 자동차는 한 대뿐입니다.

    >> dotnet run
    >> curl -X 'GET' 'https://localhost:7005/odata/Cars?$filter=Price le 50' -H 'accept: text/plain' -k
    


    응답은 다음과 같아야 합니다.

    {
        "@odata.context": "https://localhost:7005/odata/$metadata#Cars",
        "value": [
            {
                "Id": 2,
                "Brand": "BMW",
                "Price": 49.99,
                "Model": "3 Series"
            }
        ]
    }
    


    요약



    이 예제에서는 ASP.NET Core Web API 애플리케이션에 OData에 대한 지원을 추가하는 방법을 살펴보고 간단한 쿼리를 수행하여 OData 요청이 전달되고 있음을 증명했습니다. 이것이 프로젝트 실행에 도움이 되었기를 바랍니다.

    연결


  • Code from this example
  • Example with OData support for a classic ASP.NET Web application
  • Example with OData support for ASP.NET Core 2.0 Web application
  • Example with OData support for ASP.NET Core 5.0 Web application
  • Another example with OData support for ASP.NET 5.0 Web application
  • 좋은 웹페이지 즐겨찾기