기본 설정

11511 단어 dotnetcsharp
앞으로 몇 주 동안 저는 ASP.NET Core Web API 구축을 처음부터 끝까지 다룰 것입니다. 이번 주에는 프로젝트, 간단한 사용자 모델, 모의 저장소 및 기본 사용자 컨트롤러를 만드는 데 중점을 둘 것입니다.

이 시리즈 전체에서 VSCode를 사용할 것이지만 어떤 편집기를 사용하든 상관없이 따라할 수 있어야 합니다. Visual Studio를 사용하는 경우 'ASP.NET Core Web Application'이라는 프로젝트 템플릿을 찾고 프로젝트 이름을 지정한 후 'API'를 선택합니다. 그렇지 않으면 다음 명령을 사용하여 프로젝트 템플릿을 만들 수 있습니다.

dotnet new webapi -n AspNetCoreWebApiIntro


템플릿은 시작하기 전에 제거할 두 개의 파일을 생성합니다. 프로젝트 디렉토리에서 Controllers/WeatherForecastController.csWeatherForecast.cs 를 제거하십시오.

이제 두 개의 폴더를 추가하겠습니다. 프로젝트의 루트 디렉터리에서 'Models'라는 폴더와 'Data'라는 폴더를 추가합니다. 루트 디렉토리는 다음과 유사해야 합니다.

Controllers
Data
Models
Properties
appsettings.json
AspNetCoreWebApiIntro.csproj
Program.cs
Startup.cs


루트 디렉토리에 다른 폴더와 파일이 있을 수 있지만 이 시리즈 전체에서 걱정할 필요는 없습니다.

사용자 모델을 만드는 것부터 시작하겠습니다. 'Models' 폴더에 'User.cs'라는 새 파일을 만들고 다음 코드를 추가합니다.

namespace AspNetCoreWebApiIntro.Models
{
    public class User
    {
        public int Id { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }
    }
}


데이터베이스를 설정하고 나면 사용자 모델을 다시 방문해야 하며 Entity Framework를 활용하여 모델에 특성을 추가하고 마이그레이션을 생성합니다. 지금은 단순히 모의 사용자를 만들어 작업을 시작하고 실행할 것입니다.

이제 모의 저장소를 만들어 보겠습니다. 'Data' 폴더에 'MockRepo.cs'라는 새 파일을 만들고 다음 코드를 추가합니다.

using System.Collections.Generic;
using System.Linq;

using AspNetCoreWebApiIntro.Models;

namespace AspNetCoreWebApiIntro.Data
{
    public class MockRepo
    {
        private readonly List<User> _users = new List<User>
        {
            new User { Id = 1, FirstName = "Jane", LastName = "Doe" },
            new User { Id = 2, FirstName = "John", LastName = "Doe" },
            new User { Id = 3, FirstName = "John", LastName = "Smith" }
        };

        public IEnumerable<User> GetAllUsers()
        {
            return this._users;
        }

        public User GetUserById(int id)
        {
            return this._users.FirstOrDefault(u => u.Id == id);
        }
    }
}


여기에서는 사용자의 개인 필드를 만들고 두 가지 방법을 노출합니다. 하나는 모든 사용자를 얻을 수 있도록 하고 다른 하나는 Id 속성을 통해 단일 사용자를 얻을 수 있습니다.

실제 데이터로 작업할 때 Entity Framework를 다시 사용하여 데이터베이스와의 통신을 처리할 때 매우 다른 작업을 수행하지만 여기서 공개하는 방법은 실제 저장소 내에서 매우 유사합니다.

이제 컨트롤러와 몇 개의 엔드포인트만 생성하면 됩니다. 'Controllers' 폴더 내에서 'UsersController.cs'라는 새 파일을 만들고 다음 코드를 추가합니다.

using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;

using AspNetCoreWebApiIntro.Data;
using AspNetCoreWebApiIntro.Models;

namespace AspNetCoreWebApiIntro.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class UsersController : ControllerBase
    {
        private readonly MockRepo _repo = new MockRepo();

        [HttpGet]
        public ActionResult<IEnumerable<User>> Index()
        {
            return Ok(this._repo.GetAllUsers());
        }

        [HttpGet("{id}")]
        public ActionResult<User> Show(int id)
        {
            User user = this._repo.GetUserById(id);

            if (user != null)
                return Ok(this._repo.GetUserById(id));
            return NotFound();
        }
    }
}


여기서는 [ApiController] 속성을 클래스에 적용합니다. 이것은 본질적으로 오류가 발생한 경우에도 작업이 항상 JSON 응답을 생성하도록 하는 동작을 구현합니다.

클래스에 [Route("api/[controller]")] 속성을 추가하고 있음을 알 수 있습니다. 이 속성은 사용자 리소스의 루트를 api/users 에 배치합니다. 컨트롤러의 이름이 변경되어야 하는 경우 위치가 변경되는 것을 방지하기 위해 원하는 경우 대신 [Route("api/users")]를 사용할 수 있습니다.

또한 [HttpGet] 속성을 IndexShow 메서드에 적용하여 요청 및 캡처 매개변수에서 사용하는 동사를 설명합니다. 앞으로 나아가 POST, PATCH 및 DELETE에 대한 작업을 구현하면서 이에 대해 자세히 알아보겠습니다.

각 작업은 현재 ActionResult<T>를 반환합니다. 여기서 T는 응답 본문에서 반환하는 데이터 유형을 나타냅니다. 각 시나리오에 적절한 응답을 생성하기 위해 상속받은 ControllerBase 클래스에서 제공하는 여러 메서드를 사용합니다. 우리는 진행하면서 몇 가지 다른 것을 배우게 될 것입니다.

이제 Properties/launchSettings.json를 열고 applicationUrlAspNetCoreWebApiIntro 속성을 찾으십시오. 기본적으로 이 값은 https://localhost:5001;http://localhost:5000 여야 합니다. 어쨌든 브라우저에서 세미콜론으로 구분된 첫 번째 주소를 방문하고 싶을 것입니다.

프로젝트를 빌드하고 실행합니다(터미널에서 dotnet run). 위에 나열된 포트를 사용한다고 가정하면 다음 엔드포인트가 아래 나열된 응답을 제공해야 합니다.

https://localhost:5001/api/users
[{"id":1,"firstName":"Jane","lastName":"Doe"},{"id":2,"firstName":"John","lastName":"Doe"},{"id":3,"firstName":"John","lastName":"Smith"}]

https://localhost:5001/api/users/1
{"id":1,"firstName":"Jane","lastName":"Doe"}

https://localhost:5001/api/users/2
{"id":2,"firstName":"John","lastName":"Doe"}

https://localhost:5001/api/users/3
{"id":3,"firstName":"John","lastName":"Smith"}


그 이정표를 달성하고 우리는 휴식을 취할 것입니다. 이 시리즈의 다음 부분에서는 데이터베이스를 설정하고 실제 저장소를 만들고 Entity Framework를 사용하여 애플리케이션 내에서 데이터베이스 트랜잭션을 관리합니다.

좋은 웹페이지 즐겨찾기