2017-09-04 2 views
2

C#에서 일부 API 호출을해야합니다. Microsoft의 Web API Client를 사용하고 있습니다. 일부 POST 요청을 만들기 위해 성공했지만 내 요청에 "본문"필드를 추가하는 방법을 모르겠습니다. 어떤 생각?POST 요청시 본문 내용

static HttpClient client = new HttpClient(); 
    public override void AwakeFromNib() 
    { 
     base.AwakeFromNib(); 
     notif_button.Activated += (sender, e) => { 
     }; 
     tips_button.Activated += (sender, e) => 
     { 
      Tip t1 = new Tip(title_tips.StringValue, pic_tips.StringValue, content_tips.StringValue, "TEST"); 
      client.BaseAddress = new Uri("my_url"); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
      CreateProductAsync(t1).Wait(); 
     }; 
    } 

    static async Task<Uri> CreateProductAsync(Tip tips) 
    { 
     HttpResponseMessage response = await client.PostAsJsonAsync("api/add_tips", tips); 
     response.EnsureSuccessStatusCode(); 
     return response.Headers.Location; 
    } 
+0

대신 자문을 게시하십시오. –

답변

2

덕분에 thisthis 덕분에 헤더 및 본문 내용이 포함 된 게시물 요청을 보낼 수있는 솔루션을 찾았습니다. 코드는 다음과 같습니다.

 var cl = new HttpClient(); 
     cl.BaseAddress = new Uri("< YOUR URL >"); 
     int _TimeoutSec = 90; 
     cl.Timeout = new TimeSpan(0, 0, _TimeoutSec); 
     string _ContentType = "application/x-www-form-urlencoded"; 
     cl.DefaultRequestHeaders.Add(key, value); 
     cl.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(_ContentType)); 
     cl.DefaultRequestHeaders.Add("key", "value"); 
     cl.DefaultRequestHeaders.Add("key", "value"); 
     var _UserAgent = "d-fens HttpClient"; 
     cl.DefaultRequestHeaders.Add("User-Agent", _UserAgent); 

     var nvc = new List<KeyValuePair<string, string>>(); 
     nvc.Add(new KeyValuePair<string, string>("key of content", "value")); 
     var req = new HttpRequestMessage(HttpMethod.Post, "http://www.t-lab.fr:3000/add_tips") { Content = new FormUrlEncodedContent(nvc) }; 
     var res = cl.SendAsync(req); 
+0

List >(); dicionary var payload = new Dictionary { { "grant_type", GoogleAuthGrantType}, { "assertion", googleAuthJwt} }; –

2

1 단계 HttpContent에서 파생되는 유형을 선택합니다 다음은 내 코드입니다. 런타임 코드로 많은 내용을 쓰고 싶다면 StreamContent을 사용하고 StreamWriter를 열 수 있습니다. 짧게는 StringContent을 사용하십시오. 또한 사용자 정의 컨텐츠 용으로 고유 한 클래스를 파생시킬 수 있습니다.

2 단계. HttpClient.PostAsync으로 통화 할 때 콘텐츠를 전달하십시오. 또한 How do I set up HttpContent?

string json = JsonConvert.SerializeObject(someObject); 
var httpContent = new StringContent(json, Encoding.UTF8, "application/json"); 
var httpResponse = await httpClient.PostAsync("http://www.foo.bar", httpContent); 

참조 :

는 여기에 몇 가지 JSON을 통과 StringContent를 사용하는 예입니다.

+0

답변에 대한 답변. 나는 내가 잘 이해하지 못했다고 생각한다. 실제로 코드에서 "someObject"를 "tips"로 대체하지만 여전히 작동하지 않습니다. 설명하거나 자세히 설명해 주시겠습니까? 머리글과 본문을 게시해야합니다. 고마워요. –