SW 기능/.NET Core

Model Binding

tacoyaggi 2024. 2. 2. 10:41

Model Binding 란?

  • 여기서 말하는 Model Binding은 액션 함수 파라미터 부분만 해당됨
  • 주로 액션함수가 호출 되었을 때 파라미터 인자에 어떻게 바인딩 할 것 인가에 대해서 알아봄

[FromBody]

  • Request 중 Body에서 데이터를 추출함
  • Body에서 추출하니까 주로 Post 요청을 받을 때 처리함
  • Body에서 데이터를 추출하기 때문에 파라미터가 없음
public async Task<IActionResult> Login([FromBody] AccountDto requestDto)


[FromQuery]

  • QueryString으로 데이터를 받음
  • Get 방식임
public async Task<IActionResult> Login([FromQuery] AccountDto requestDto)


[FromRoute]

  • FromRoute 이녀석은 좀 재밌음. 요청 URL 경로에서 데이터를 추출함
  • 아래 Get 경로 중 id pw 부분의 데이터를 추출 할 수 있음
  • 모델로는 받을 수 없는 것 같음
  • 어디다가 사용할지는 흠 ㅋ
        [HttpGet("{id}/route/{pw}")]
        public async Task<IActionResult> Login([FromRoute] string id , [FromRoute] string pw)
  • 아래는 호출 경로임.
  • ㅇㅇ는 id, 123은 pw
  • FromRoute의 경우 경로에서 데이터를 추출하기 때문에 Get 이던 Post던 노상관
    /api/Account/ㅇㅇ/route/123

[FromForm]

  • HTML Form에서 전송된 데이터를 인자로 바인딩함
  • 이 속성은 주로 웹 페이지에서 사용자가 입력한 폼 데이터를 서버로 전송하고 해당 데이터를 읽을 때 사용한다고 함...
  • 주로 호출하는 방식이 비동기 호출이니까 많이 사용안해서 생소함
          public async Task<IActionResult> Login([FromForm] AccountDto requestDto)

[FromHeader]

  • 요청 헤더에서 특정 헤더값을 바인딩 할 때 사용
  • 헤더에 존재하는 key값이 필요할 때 요긴할 듯
  • Name 속성에 Header에 존재하는 name 넣어주면 바인딩 해주는 듯
        public async Task<IActionResult> Login([FromHeader(Name = "User-Agent")] string requestHeader)
  • 아래는 User-Agent key를 넣고 받은 값인데 Header 종류에 대해서 알아야 겠다 ㅋ
          Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36

[FromService]

  • FromService 이녀석은... HTTP 요청과는 무관한 녀석임
  • 종속성 주입을 받은 인터페이스를 인자로 받아서 해당 메서드에만 필요한 서비스를 사용한다고 한다 ㅋㅋ...
  • 어느 상황에서 써야하는지는 도무지 감이 안온다.
  • 구현은 해봤는데 메서드에서만 구현해야하는 이유가 있을까? 클래스 단계에서 종속성을 주입하면 문제가 있는 상황이 있나..?
  • 정리하면 HTTP 요청과는 전혀 무관한 녀석이고 메서드 단위에서 단독으로 처리해야할 때 사용함..
                private readonly IAccountService _accountService;

        public AccountController(IAccountService accountService)
        {
            _accountService = accountService;   
        }

        [HttpGet]
        public async Task<IActionResult> Login([FromServices] IAccountService requestAccount)
        {

            requestAccount.Login();