[ASP.NET] 모델 바인딩

Model Binding

  • 모델 바인딩 (Model Binding): HTTP 요청 데이터와 모델(Model) 객체를 매핑해주는 것
  • 라우트(경로) 데이터, 폼 필드, 쿼리 문자열과 같은 다양한 소스로부터 데이터를 얻을 수 있게 해줌
  • 뷰(View)로부터 전달되는 클라이언트의 HTTP 요청 데이터(문자열)를 .NET 객체로 생성하여 서버에서 사용할 수 있게 해줌
  • 뷰의 데이터가 HTTP 요청을 처리하는 컨트롤러의 액션(Action) 메소드의 인자로 전달될 때 모델 바인더(Model Binder)에 의해 모델 객체의 속성으로 변환됨
  • 모델 바인더의 역할: 뷰의 데이터를 모델 객체의 속성으로 변환
  • POSTGET 요청 메소드를 통해 전달되는 HTTP 요청은 모델 바인딩에 의해 자동으로 변환됨
  • 기본 모델 바인딩 속성
    1. FromRouteAttribute: 라우트 데이터로부터 파라미터나 속성 값을 바인딩할 수 있도록 지정하는 속성
    2. FromUriAttribute: 쿼리 문자열이나 라우트 데이터로부터 값을 바인딩할 수 있도록 지정하는 속성
      • .NET Core MVC의 FromQueryAttribute와 동일
    3. FromFormAttribute: 요청 바디의 폼 데이터로부터 파라미터나 속성 값을 바인딩할 수 있도록 지정하는 속성
    4. FromBodyAttribute: 요청 바디로부터 파라미터나 속성 값을 바인딩할 수 있도록 지정하는 속성
  • 빈 문자열("")을 쿼리 문자열로 보내더라도 모델 바인딩에 의해 null로 들어오게 됨
    • HTTP 요청: &name=
    • API 요청 객체([FromUri]Request request)의 Name 속성값: null
  • Controller의 메소드 파라미터가 string name(required) 또는 string name=null(optional)인 경우 API 호출 시 값이 필요하지만 요청에 표시되지 않았습니다(A value is required but was not present in the request) 에러 발생 가능
    • HttpConfigurationParameterBindgRules 관련(?) -> Web API 버전에 따른 바인딩 동작, 규칙 확인 필요
  • https://stackoverflow.com//a/36388587

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-6.0

Comments