이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 27609|회답: 3

[WebAPI] WebAPI는 요청 내용에 여러 매개변수(SB와 SB1)를 바인딩할 수 없습니다

[링크 복사]
게시됨 2016. 8. 16. 오후 1:52:38 | | | |



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]로 표시된 매개변수가 단순 매개변수라면 태그를 제거할 수 있습니다.




이전의:.NET Oracle 멀티테이블 쿼리 메서드, 정말 멍청한 방법이네요.
다음:C#은 반사를 사용하여 속성이 할당되었는지 판단합니다
게시됨 2016. 8. 16. 오후 3:21:29 |
ModelBinder에는 ModelBinderAttribute에 대한 특징 클래스가 있어야 합니다

필터와 유사합니다
게시됨 2016. 8. 16. 오후 3:21:44 |
매일 방문해 주세요
게시됨 2016. 8. 16. 오후 3:22:00 |
명예 좀 줘
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com