尝试使用HttpClient.PostAsync而不是WebClient通过NameValueCollection发布S

本文关键字:WebClient 通过 NameValueCollection 发布 HttpClient PostAsync | 更新日期: 2023-09-27 17:59:44

我正在尝试使用HttpClient将NameValueCollection发布到特定的Url。我有使用WebClient的代码,但我正在努力弄清楚是否可以使用HttpClient。

下面,你会发现我使用WebClient的工作代码:

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);
}

我正在使用此代码尝试使用网络集成将消息发布到Slack频道。有没有一种方法可以在使用HttpClient时实现同样的功能?

当我尝试使用HttpClient时,我收到的Slack错误是"missing_text_or_fallback_or_attachment"。

提前感谢您的帮助!

尝试使用HttpClient.PostAsync而不是WebClient通过NameValueCollection发布S

使用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
                }
            }

当你在问题中标记#slack时,我建议你使用slack.Webhooks nuget包。

我发现的用法示例在这里;

https://volkanpaksoy.com/archive/2017/04/11/Integrating-c-applications-with-slack/

var url = "{Webhook URL created in Step 2}";
var slackClient = new SlackClient(url);
var slackMessage = new SlackMessage
{
    Channel = "#general",
    Text = "New message coming in!",
    IconEmoji = Emoji.CreditCard,
    Username = "any-name-would-do"
};
slackClient.Post(slackMessage);