2016-08-02 81 views
1

我試圖使用HttpClient將NameValueCollection發佈到特定的Url。我的代碼使用WebClient工作,但我試圖弄清楚是否可以使用HttpClient。試圖通過使用HttpClient.PostAsync而不是WebClient通過NameValueCollection發佈Slack消息

下面,你會發現我的工作代碼,使用Web客戶端:

var payloadJson = JsonConvert.SerializeObject(new { channel, username, text }); 

using (var client = new WebClient()) 
{ 
    var data = new NameValueCollection(); 
    data["payload"] = payloadJson; 

    var response = client.UploadValues(_uri, "POST", data); 

    var responseText = _encoding.GetString(response); 
} 

我使用此代碼嘗試發佈消息到使用web集成鬆弛的通道。有沒有一種方法可以在使用HttpClient的同時實現相同的功能?

我嘗試使用HttpClient時收到的Slack錯誤是「missing_text_or_fallback_or_attachment」。

在此先感謝您的幫助!

回答

0

使用HttpClient的

 using (var client = new HttpClient()) 
      { 
       client.BaseAddress = new Uri("http://yourdomain.com/"); 
       client.DefaultRequestHeaders.Accept.Clear(); 
       client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

       var data = new NameValueCollection(); 
       data["payload"] = payloadJson; 

       StringContent content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json"); 

       try 
       { 
        HttpResponseMessage response = await client.PostAsync("api/yourcontroller", content); 
        if (response.IsSuccessStatusCode) 
        { 
         //MessageBox.Show("Upload Successful", "Success", MessageBoxButtons.OK); 
        } 
       } 
       catch (Exception) 
       { 
        // ignored 
       } 
      } 
+0

不幸的是,這並不工作。我認爲它與SlackAPI有關,它以某種方式需要POST不是JSON,而是將它打包成一個。 – HaydenThrash

+0

它的方式,我已經告訴你,我不知道你的所有代碼,但你可以改變它爲你的工作,這個代碼是工作版本,我已經使用它之前 – Mostafiz

+0

你使用它與鬆弛? – HaydenThrash