서비스를 만들어보려면 코드를 이해해야 한다. 이번 포스팅은 기본 프로젝트를 이해하고 API를 간단하게 사용해보려 한다.
주의깊게 볼 구조는 다음과 같다.
├── Controllers
│ ├── HomeController.cs
├── Models
│ ├── ErrorViewModel.cs
├── Program.cs
├── Properties
│ └── launchSettings.json
├── Views
│ ├── Home
│ │ ├── Index.cshtml
│ │ └── Privacy.cshtml
│ ├── Login
│ │ └── index.cshtml
│ ├── Shared
│ │ ├── Error.cshtml
│ │ ├── _Layout.cshtml
└──-------- _Layout.cshtml.css
우선 Program.cs를 확인해보자.
var app = builder.buld(): builder라는 object에 의해 빌드된다.
app.UseRouting(): 후에 라우팅하는 방법을 설정하는 것 같다.
app.UseAuthorization(): 인증 및 접근에 대한 보안 설정인 것 같다.
app.MapControllerRoute(): 이것으로 웹의 URL 주소를 설정해주는 것 같다.
app.Run(): 서버 실행일 것이다.
앞서 Route에서 URL을 매핑한 방식대로 확인해보니 각각 이런 방법으로 진행되는 것 같았다.
View 디렉토리는 html과 같기도 하고 js도 사용이 가능하기에 굳이 설명하지 않겠다.(기존 html과 큰차이 X)
URL에 접근을 하면 처음으로 접근하는 곳이 /Home/Index 이다. 이는 Program.cs에서 default값을 해당 URL로 잡아놓았기 때문이다.
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
어찌됐든 우리는 REST API를 기반으로 Controller에 접근하고자 한다.
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using dotnet_test.Models;
namespace dotnet_test.Controllers;
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
// METHOD : GET
[HttpGet]
public IActionResult Index()
{
return View();
}
// GET - PARAMETER
public IActionResult Index(string id)
{
Console.WriteLine(id);
return View();
}
// METHOD : POST
// BODY : { "id": "psg", "pass" : "123", "nick" : "moka", "email" : "test@test.com"}
[HttpPost]
public IActionResult Login([FromBody]Member member)
{
member.print();
return Ok();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
해당 코드를 보면 [HttpGet] 또는 [HttpPost] 방식으로 REST API의 Method를 세팅해준다.
GET에서 화면을 보여주려면 return View(); 를 해주면 된다. parameter를 담으려면 function의 파라미터에 변수를 넣어주기만 하면 된다.
POST방식에서 BODY에 담으려면 함수의 파라미터에 [FromBody]를 넣어주면 된다.
여기서 보내주는 값이 Object(JSON)이라면 Models에서 따로 class로 정해주어야 한다. Models에서 이렇게 정의해주자.
public class Member
{
public string? id { get; set; } // string?: null값에 대한 예외처리
public string? pass { get; set; }
public string? nick { get; set; }
public string? email { get; set; }
public void Print(){
Console.WriteLine($"id: {this.id}/pass: {nick}/email: {email} asdfasd");
}
}
Print를 사용하여 필드들을 하나씩 불러온 것을 활용하여 Dao를 사용하면 좋을 것 같다.