2017-11-06 13 views
1

내 WebApi에서 HttpRequestMessage으로 사용하지 않는 한 HttpGetHttpPost 메서드를 사용하면 get 메서드가 제대로 작동하고 POST 메서드가 호출되지만 본문 내용이 항상 null입니다. 모델 에서처럼 문자열 형식 (선호하는 데이터 유형)으로 본문 내용을 제공하려했지만 이러한 방법 중 어느 것도 작동하지 않았습니다. 나는 또한 성공없이 내용 유형을 바꾸는 시도했다. 아무도 내가 뭔가 잘못하고있는 경우 또는 쉽게 아래 예제에서 "테스트"입니다 HttpRequestMessage에서 변수 데이터를 얻을 수 있는지 알고 있습니다.WebApi HttpPost 본문 내용 null

방법 1 :

[System.Web.Http.HttpPost] 
[Route("api/v1/AddItem")]  
public IHttpActionResult AddItem([FromBody]string filecontent, string companycode) 
{ 
    MessageBox.Show(filecontent); 

    Return Ok(""); 
} 

방법 2 (모델)

[System.Web.Http.HttpPost] 
[Route("api/v1/AddItem")]  
public IHttpActionResult AddItem([FromBody]ItemXML filecontent, string companycode) 
{ 
    MessageBox.Show(filecontent.XMLContent); 

    Return Ok(""); 
} 

모델 :

public class ItemXML 
{ 
    public ItemXML(string content) 
    { 
    XMLContent = content; 
    } 
    public string XMLContent { get; set; }  
} 

방법 3 :

[System.Web.Http.HttpPost] 
[Route("api/v1/AddItem")]  
public IHttpActionResult AddItem(HttpRequestMessage filecontent, string companycode) 
{ 
    var content = filecontent.Content.ReadAsStringAsync().Result;  
    MessageBox.Show(content); 

    Return Ok(""); 
} 
,

방법 3 내용 문자열 ("test"는 제공된 값입니다.) : "content"------ WebKitFormBoundarydu7BJizb50runvq0 \ r \ nContent-Disposition : form-data; 이름 = \ "를 포함한 FileContent \"\ 연구 \ 없음 \ 연구 \ n \ "테스트 \"\ 연구 \ n ------ WebKitFormBoundarydu7BJizb50runvq0 - \ 연구 \ 없음 "문자열"

+1

요청 방법을 보여줍니다. JSON 또는 양식 데이터를 게시하고 있습니까? 파일 내용 매개 변수 이름 때문에 양식을 가정합니다 – Nkosi

+0

두 방법으로 시도했지만 성공하지 못했습니다. – Alim

답변

1

만들기 모델 저장소 데이터는 확인 요청이 제대로 전송되는지 확인 클라이언트에서 서버

public class Model { 
    public string filecontent { get; set;} 
    public string companycode { get; set;} 
} 

업데이트 작업

[HttpPost] 
[Route("api/v1/AddItem")]  
public IHttpActionResult AddItem([FromBody]Model model) { 
    if(ModelStat.IsValid) { 
     return Ok(model); //...just for testing 
    } 
    return BadRequest(); 
} 

드립니다. 이 경우 JSON을 사용합니다.

public client = new HttpClient(); 

var model = new { 
    filecontent = "Hello World", 
    companycode = "test" 
}; 

var response = await client.PostAsJsonAsync(url, model); 

데이터가 요청을 수락 할 수있는 웹 API 조치에 대해 올바르게 포맷 전송되는 것을 확인 다른 종류의 클라이언트를 사용하는 경우.

참고 Parameter Binding in ASP.NET Web API

+0

이것이 트릭이었습니다. 이전에 작동하지 않은 이유는 무엇입니까? 회사 코드가 모델에 포함되지 않았기 때문입니까? – Alim

+0

@Alim 저는 컨트롤러가 동작을 정의하는 방법과 데이터를 보내는 방식의 형식 때문에 요청을 인식하지 못하는 컨트롤러의 조합이라고 생각합니다. – Nkosi

+0

@Alim'[FromBody]'사용법에 대한 참고 링크를 포함했습니다. – Nkosi