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();