ASP.NET Web API는 컨트롤러에서 메서드를 호출할 때 매개변수에 대한 값을 설정해야 하며 이를 매개변수 바인딩이라고 합니다.
일반적으로 포맷터로 기본 설정되는 모델(작업 매개변수)을 바인딩하려면 URI에서 [FromUri] 속성으로 이를 장식해야 합니다. FromUriAttribute는 단순히 ModelBinderAttribute에서 상속되어 IUriValueProviderFactory에 정의된 ValueProviders를 사용하여 URI에서 특정 매개변수를 가져오도록 Web API에 지시하는 바로 가기 지시문을 제공합니다. 속성 자체는 봉인되어 더 이상 확장할 수 없지만 원하는 만큼 사용자 정의 IUriValueProviderFactories를 추가합니다.
ParameterBindingAttribute 클래스를 상속하는 [FromBody] 속성은 HTTP 요청 본문에서 매개변수와 해당 속성을 채우는 데 사용됩니다. ASP.NET 런타임은 본문을 읽는 책임을 입력 포맷터에 위임합니다. [FromBody]가 복합 유형 매개변수에 적용되면 해당 속성에 적용된 모든 바인딩 소스 속성이 무시됩니다.
FromUri 속성의 예 -
예
using System.Collections.Generic; using System.Web.Http; namespace DemoWebApplication.Controllers{ public class DemoController : ApiController{ public IEnumerable<string> Get([FromUri] string id, [FromUri] string name){ return new string[]{ $"The Id of the Student is {id}", $"The Name of the Student is {name}" }; } } }
위의 예에서 URI의 id와 name 값을 전달하여 Get 메서드의 해당 변수에 채우도록 합시다.
https://localhost:58174/api/demo?id=1&name=마크
출력
위 코드의 출력은
FromBody 속성의 예 -
예
아래 속성을 가진 학생 모델을 생성해 보겠습니다.
namespace DemoWebApplication.Models{ public class Student{ public int Id { get; set; } public string Name { get; set; } } }
컨트롤러 코드 -
예
using DemoWebApplication.Models; using System.Collections.Generic; using System.Web.Http; namespace DemoWebApplication.Controllers{ public class DemoController : ApiController{ public IEnumerable<string> Get([FromBody] Student student){ return new string[]{ $"The Id of the Student is {student.Id}", $"The Name of the Student is {student.Name}" }; } } }
위의 예에서 학생의 값은 요청 본문에 전달되고 학생 개체의 해당 속성에 매핑됩니다. 다음은 Postman을 사용한 요청 및 응답입니다.