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