728x90
A. 웹 프로젝트 만들기
- 파일 메뉴에서 새로 만들기>프로젝트를 선택합니다.
- 검색 상자에 Web API를 입력합니다.
- ASP.NET Core Web API 템플릿을 선택하고 다음을 선택합니다.
- 새 프로젝트 대화 상자 구성에서 TodoApi 프로젝트 이름을 지정하고 다음을 선택합니다.
- 추가 정보 대화 상자에서 다음을 수행합니다.
- 프레임워크가 .Net 6.0(장기 지원)인지 확인합니다.
- 컨트롤러 사용(최소 API를 사용하려면 선택 취소) 확인란을 선택합니다.
- 만들기를 선택합니다.
B. launchUrl 업데이트
Properties\launchSettings.json에서 launchUrl을 "swagger"에서 "api/todoitems"로 업데이트합니다.
"launchUrl": "api/todoitems",
// Properties/launchSettings.json
// http 8080 으로 변경
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:8080",
"sslPort": 0
}
},
"profiles": {
"WebApplication1": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/todoitems",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:8080",
"dotnetRunMessages": true
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "api/todoitems",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
C. 모델 클래스 추가
- 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭합니다. 추가>새 폴더를 선택합니다. 폴더 이름을 Models서 무료 평가판 계정을 등록할 수 있습니다.
- Models 폴더를 마우스 오른쪽 단추로 클릭하고 추가>클래스를 선택합니다. 클래스 이름을 TodoItem으로 지정하고 추가를 선택합니다.
- 템플릿 코드를 다음으로 바꿉니다.
namespace TodoApi.Models
{
public class TodoItem
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
}
}
D. 데이터베이스 컨텍스트 추가
NuGet 패키지 추가
- 도구 메뉴에서 NuGet 패키지 관리자 > 솔루션용 NuGet 패키지 관리를 선택합니다.
- 찾아보기 탭을 선택한 다음, 검색 상자에 Microsoft.EntityFrameworkCore.InMemory를 입력합니다.
- 왼쪽 창에서 Microsoft.EntityFrameworkCore.InMemory를 선택합니다.
- 오른쪽 창에서 프로젝트 확인란을 선택하고 설치를 선택합니다.
TodoContext 데이터베이스 컨텍스트 추가
- Models 폴더를 마우스 오른쪽 단추로 클릭하고 추가>클래스를 선택합니다. 클래스 이름을 TodoContext로 지정하고 추가를 클릭합니다.
using Microsoft.EntityFrameworkCore;
using System.Diagnostics.CodeAnalysis;
namespace TodoApi.Models
{
public class TodoContext : DbContext
{
public TodoContext(DbContextOptions<TodoContext> options)
: base(options)
{
}
public DbSet<TodoItem> TodoItems { get; set; } = null!;
}
}
E. 데이터베이스 컨텍스트 등록
Program.cs
using Microsoft.EntityFrameworkCore;
using TodoApi.Models;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddDbContext<TodoContext>(opt =>
opt.UseInMemoryDatabase("TodoList"));
//builder.Services.AddSwaggerGen(c =>
//{
// c.SwaggerDoc("v1", new() { Title = "TodoApi", Version = "v1" });
//});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (builder.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
//app.UseSwagger();
//app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "TodoApi v1"));
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
F. 컨트롤러 스캐폴드, 자동으로 샘플 CRUD를 생성해줌
- Controllers 폴더를 마우스 오른쪽 단추로 클릭합니다.
- 추가>스캐폴드 항목 새로 만들기를 선택합니다.
- Entity Framework를 사용하며 동작이 포함된 API 컨트롤러를 선택하고 추가를 선택합니다.
- Entity Framework를 사용하며 동작이 포함된 API 컨트롤러 추가 대화 상자에서:
- 모델 클래스에서 TodoItem(TodoApi.Models) 을 선택합니다.
- 데이터 컨텍스트 클래스에서 TodoContext(TodoApi.Models) 를 선택합니다.
- 추가를 선택합니다.
G. PostTodoItem 만들기 메서드 업데이트
// nameof 연산자를 사용하도록 PostTodoItem의 return 문을 업데이트합니다.
[HttpPost]
public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem)
{
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
//return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem);
}
H. http-repl 설치
// http-repl을 사용하여 웹 API를 테스트합니다.
// 명령 프롬프트에서 다음 명령을 실행합니다.
dotnet tool install -g Microsoft.dotnet-httprepl
I. PostTodoItem 테스트
httprepl http://localhost:8080/api/todoitems
post -h Content-Type=application/json -c "{"name":"walk dog","isComplete":true}"
J. Postman POST 호출
K. Postman GET 호출
728x90
'푸닥거리' 카테고리의 다른 글
InnoDBClusterSet (0) | 2022.06.16 |
---|---|
외부화를 위한 Amazon의 선언 (0) | 2022.06.13 |
M201 MongoDB Performance (0) | 2022.06.11 |
Two-Pizza Teams (0) | 2022.06.11 |
MariaDB Galera Cluster 제약사항 (0) | 2022.06.10 |
댓글