2016-08-02 1 views
12

아래 코드는 필요성을 나타 내기 위해 단순화되었습니다. 무엇이 잘못되었는지 알 수 있습니까? 나는 [FromBody] 속성을 사용하여 두 개의 매개 변수 (이 경우 A와 B)를 검색하는 것처럼 보이지 않습니다.WebAPI 자체 호스트 : 요청의 콘텐츠에 여러 매개 변수를 바인딩 할 수 없습니다.

오류 메시지가

"요청의 콘텐츠를 여러 매개 변수 ('A'와 'B')를 결합 할 수 없습니다"입니다 I는 A 또는 B 단지 중 하나가 있다면 그것은 완벽하게 괜찮습니다.

웹 API :

[Route("API/Test"), HttpPost] 
public IHttpActionResult Test([FromBody] int A, [FromBody] int B) 

클라이언트 :

HttpClient client = new HttpClient(); 
var content = new FormUrlEncodedContent(
    new Dictionary<string, string> { 
     { "A", "123" }, 
     { "B", "456" } 
    }); 
client.PostAsync("http://localhost/API/Test", content).Result; 

답변

3

웹 API 코드를보십시오 :

[DataContract] 
public class Model 
{ 
    [DataMember] 
    public int A { get; set; } 

    [DataMember] 
    public int B { get; set; } 
} 

[Route("API/Test"), HttpPost] 
public IHttpActionResult Test([FromUri] Model model) 
17

웹 API는 내가 생각하는 여러 [FromBody] PARAMS을 지원하지 않습니다. 그러나 당신이 당신의 API를 작업에 더 많은 매개 변수를 전달로, API 광고 모델을 사용할 수 있습니다 :

public class YourApiModel 
{ 
    public int A{ get; set; } 

    public int B { get; set; } 

    //...other properties  
} 

을 그 후, 당신은 단순히 당신의 API 컨트롤러 테스트에서 이것을 사용할 수 있습니다

// POST: api/test 
    public IHttpActionResult Post([FromBody] YourApiModel model) 
    { 
     //do something 
    } 

은 도움 바랍니다.

관련 문제