WebAPI에서는 요청 본문(HttpContent)이 한 번만 읽을 수 있고, 캐시되지 않고 오직 앞으로 읽을 수 있습니다.
예를 들어:
1. 요청 주소: /?id=123&name=bob
서버 측 메서드: void Action(int id, string name) // 모든 매개변수는 단순 타입이므로 URL에서 모두 옵니다
2. 요청 주소: /?id=123&name=bob
서버 측 방법: void Action([FromUri] int id, [FromUri] 문자열 이름) // 위와 동일
공허 행동([FromBody] 문자열 이름); [FormBody] 속성은 전체 본문이 인수로 문자열로 읽힌다는 것을 나타냅니다
3. 요청 주소: /?id=123
클래스 정의:
public class Customer { // 복잡한 객체 유형 정의 공개 문자열 이름 { get; 세트; } public int 나이 { get; 세트; }
}
서버 측 방법: void Action(int id, Customer c) // Parameter id는 쿼리 문자열에서 읽히고, parameter c는 복잡한 Customer 객체 클래스로, 본문에서 포맷터로 읽습니다
서버 측 방법: 무효 처리(Customer c1, Customer c2) // 오류! 여러 매개변수는 복소수형이며 모두 한 번만 읽을 수 있는 본체에서 읽으려 합니다
서버 측 방법: void action([FromUri] Customer c1, Customer c2) // 네! 위의 동작과 달리, 복소형 C1은 URL에서, C2는 본문에서 읽힙니다
4. ModelBinder 방법:
void Action([ModelBinder(MyCustomBinder)] SomeType c) // 특정 모델 바인더가 매개변수를 해석하는 데 사용됨을 나타냅니다
[ModelBinder(MyCustomBinder)] public class SomeType { } // 이 규칙을 모든 SomeType 타입 매개변수에 적용하세요. [ModelBidner(MyCustomBinder)] 속성을 특정 타입 SomeType으로 선언하여
void Action(SomeType c) // c의 타입이 SomeType이므로, SomeType의 특성이 그 모델 바인딩을 결정하는 데 적용됩니다
요약:
1. 기본 단순 매개변수는 예외를 두고 URL 매개변수를 통해 전달됩니다:
1.1 경로에 id 매개변수가 포함되어 있다면, id 매개변수는 경로를 통과합니다;
1.2 매개변수가 [FromBody]로 표시되어 있다면, 매개변수는 단순 매개변수일 수 있으며, 클라이언트는 POST: $.ajax(url, '=value') 또는 $.ajax({url: url, data: {'': 'value'}})를 통해 전달할 수 있습니다.
2. 기본 복합 매개변수(커스텀 엔티티 클래스)는 POST를 통해 전달되며, 예외는 다음과 같습니다:
2.1 매개변수 값이 [FromUri]로 표시되어 있다면, 매개변수는 복소수 매개변수일 수 있습니다;
3. [FromBody]로 표시된 매개변수는 한 번만 등장할 수 있습니다[FromUri]로 표시된 매개변수는 여러 번 나타날 수 있으며, [FromUri]로 표시된 매개변수가 단순 매개변수라면 태그를 제거할 수 있습니다. |