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)
[FromForm]
[FromHeader]
- 요청 헤더에서 특정 헤더값을 바인딩 할 때 사용
- 헤더에 존재하는 key값이 필요할 때 요긴할 듯
- Name 속성에 Header에 존재하는 name 넣어주면 바인딩 해주는 듯
public async Task<IActionResult> Login([FromHeader(Name = "User-Agent")] string requestHeader)
[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();