.NET 5.0 - (3)

SeungHyuk Shin·2021년 4월 18일
0

Dotnet

목록 보기
3/5

1. 컨트롤러와 뷰 만들기


컨트롤러 폴더 우클릭 - new item - MVC controller empty를 클릭해 컨트롤러를 만들고 이름은 AppointmentController.cs로 해준다. 만들고 나면 다음과 같은 소스코드가 기본으로 적혀있다.

namespace InAndOut.Controllers
{
    public class AppointmentController : Controller
    {
        public IActionResult Index()
        {
           	return View();
            
        }
    }
}

여기서 현재 기본으로 설정된 뷰로 리턴을 하고있지만 제대로 작동하는지 확인하기 위해 조금 바꿔 현재 날짜를 가져오도록 해보겠다.

string todaysDate = DateTime.Now.ToShortDateString();
return Ok(todaysDate)

Ok는 asp.net에서 제공하는 status200을 응답으로 보내는 빈 오브젝트이다. 이 파라미터로 todaysDate 변수를 넣어 도메인/appointment(컨트롤러)/index(액션) url에 접속하면 오늘의 날짜가 보이는것을 볼 수 있다.

그렇다면 이제 실제로 view를 만들어보자. view 폴더아래 appointment 폴더를 만들고 view 만드는 방법도 있겠지만 쉽게 현재 메소드를 우클릭한다음 add view를 클릭해주면 손 쉽게 view를 만들 수 있다.

Razor view를 설정해주고 template는 empty로 만들어 준다.

2. Routing in MVC Core


라우팅은 어플리케이션 내에서 요청된 URL과 어떤 컨트롤러와 액션이 실행되어야 할지 정하는 작업이다. 앞서 글에서 설명했듯이 .net core에서 라우팅을 하는 방법은 여러가지가 있다.

  • Controllers
  • Razor Pages
  • gRPC services
  • End-Point-enables middlware
  • delegates and lambdas registered with routing

여기서는 컨트롤러에 집중해서 보도록 하겠다. ASP.NET core 컨트롤러는 라우팅 미들웨어를 사용해서 들어오는 url들의 요청과 컨트롤러,액션을 매칭시킨다.

  • Convention Based Routing : Convention Based Routing은 라우트가 라우트 템플릿을 기반으로 정한 규칙에 의해 지정된다. ASP.NET core에서는 Startup.cs 파일에 지정되어있다.

코드를보면 blog 컨트롤러로 convention routing이 되어있는것을 볼 수 있다. 또한 default 값으로 controller = "blog", action = "article"로 지정 함으로써 /blog로 들어오는 모든 url을 blog/article이 처리하게 함을 알 수 있다.

  • Attribute Based Routing : 라우트가 컨트롤러 레벨이나 액션 레벨에서 지정되는 것을 얘기한다. 한 어플리케이션에서 두가지 전부다 사용할 수 있는데 아직 사용해보지 않아서 모르겠지만 보기엔 스프링이나 NEST.JS 같은 방식과 비슷하다.

해당 방법은 액션 레벨에서 라우트를 지정하는 것이다 /blog,/blog/index, blog/index/id 모두 해당 액션으로 라우팅 된다.

이 방법은 Controller 레벨에서 라우팅을 해주는것이다. admin/contact으로 시작하는 url중 main과 detailes/id로 나뉘게 된다.

3. Controller Actions


  • 액션은 컨트롤러 클래스의 메소드로 뷰를 리턴하거나 JSON 데이터를 리턴한다.

  • 액션은 컨트롤러의 퍼블릭 메소드이다.

  • 액션의 결과는 메소드의 결과나 메소드의 반환타입이다

  • 액션 메소드는 컨트롤러에서 오버로딩 될 수 없다.

  • 액션 메소드는 static할 수 없다.

  • IActionResult와 ActionResult는 다른 액션 결과의 컨테이너로 사용된다.

  • IActionResult는 인퍼테이스이고 ActionResult는 다른 액션의 결과를 상속받는 추상클래스이다

액션 결과값의 종류에는 크게 다섯가지가 있다.

  • 상태 코드 결과
  • 상태 코드와 오브젝트 결과
  • 리다이렉트 결과
  • 파일 결과
  • 콘텐츠 결과

5. Pass value to Actions


파마리터 값을 액션에게 보내주는 것은 웹 애플리케이션 API에서 중요한 부분이다. 파라미터 값을 보내주는 방법에는 여러가지 가 있는데 다음과 같다.

  • URL의 일부분으로 파라미터 넘기기

첫번쨰 방법과 두번째 방법이 있다. 한가지 알아야 할점은 현재 route가 되고있는 id는 액션메소드에서 라우팅 되고 있다는 점이다 따라서 '/컨트롤러/id' 이런식으로 url이 들어와야 정상적으로 작동이 된다.

첫번째 방법처럼 {id} 라우트로 파라미터 값이 들어온다고 선언하거나 혹은 변수 타입 전에 [Fromroute] 값을 해당 변수를 route에서 가져온다고 명시적으로 선언할 수 있다.

  • 쿼리 스트링으로 파라미터 넘기기

가장 흔한 방법이다 왜냐하면 라우팅의 변경없이 값을 가져 올 수 있기 때문이다. 해당 url에 ? 이후 변수값을 지정해서 보내준다.

  • 헤더를 통해 파라미터 넘기기

헤더는 인기가 있진 않지만 많은 곳에서 사용된다. URL에서 값을 적어 보내지 않기때문에 일반적인 사용자가 깨닫기 어렵다. 보통 인증 방식에서 많이 사용된다.

  • request body를 통해 파라미터 넘기기

데이터를 보낼때 가장 많이 사용되는 방식이다. header Content-Type 값을 통해 body를 무슨 값으로 받을지 정할 수 있다. [FromBody]를 통해 지정해줄 수 있다.

  • form을 통해 파라미터 넘기기

폼으로 보내는것은 흔하진 않지만 파일을 업로드 하기위해선 가장 최고의 방법이다. 해당 액션을 보면 파라미터로 파일 이름과 파일을 받고있다. IFromFile을 통해 손 쉽게 파일을 처리 할 수 있다.

0개의 댓글