2013-08-15 1 views
4

저는 웹 API를 시작하고 있습니다. 일반적으로이를 좋아하지만, 'application/x-www-form-urlencoded'를 사용하여 POST 요청에서 데이터를 읽는 것이 고통 스럽습니다. 이렇게 할 수있는 더 좋은 방법이 있는지 알고 싶었습니다. 내 응용 프로그램 (x 편집 가능한 양식)은 3 개의 값 (pk, name, value)을 사용하여 컨트롤러에 간단한 HTTP POST 요청을 작성합니다.Web API - FormDataCollection을 사용해야하는 이유는 무엇입니까?

POST http://localhost/XXXX.Website/api/Category/Set HTTP/1.1 
Host: localhost 
Connection: keep-alive 
Content-Length: 39 
Accept: */* 
Origin: http://localhost 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Referer: http://localhost/XXXX.Website/ 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Cookie: ... 

name=myPropertyName&value=myTestValue&pk=1 

내 ApiController에서 내 작업 방법은 다음과 같습니다 :

public HttpResponseMessage PostSet(FormDataCollection set) {} 

나는 FormDataCollection 벌금에서 양식 값을 읽을 수 있지만, 누군가가 나에게 설명해 수 있습니다 다음과 같이

요청은

public HttpResponseMessage PostSet(string name, string value, id pk) {} 

을 아니면이 모델에 매핑하는 이유는 단순히 쓸 수 없습니다?

웹 API는 폼 값에서 매개 변수를 매핑 할 수 있다고 생각 했습니까?

답변

4

당신은 FromBody 속성을 사용하여 매개 변수를 장식해야합니다. 하지만 그것은 하나의 매개 변수에 대해서만 작동합니다. 그래, 나는 너를 찌르는 듯 느낄 수있다. 이런 식으로 뭔가 작업을해야합니다 :

public HttpResponseMessage PostSet([FromBody] string name) {} 

그러나 좋은 소식은 당신이 [ModelBinder] 속성을 사용하여 Model에 양식 매개 변수를 결합 할 수 있다는 것입니다.

자세한 내용은 this post을 확인하십시오.

+1

감사합니다. 기사에서 Web API는 기본적으로 URI에서 간단한 유형을 읽거나 본문의 복잡한 유형 (또는 동시에)을 읽는 것부터 시작합니다. [FromBody]가있는 URI 대신 Web API가 본문에서 간단한 유형을 읽도록 강제 할 수 있지만 요청 스트림은 한 번만 읽히고 독자는 다른 간단한 매개 변수를 읽으려면 되돌릴 수 없습니다. 구현 문제처럼 보입니다. 내 가치를 위해 Model 및 ModelBinder 제작을 마쳤습니다! – Martaver

관련 문제