Как правильно отформатировать данные вложения для Slack chat.postMessage - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь включить слабое уведомление, используя API приложения бота Slack, в свое приложение C #. Приведенный ниже код работает нормально, но формат, используемый для поля attachments, очень затрудняет редактирование и ведение ... Должен быть более простой способ заполнить этот массив json?

Я пробовал написать несколько способов, но не могу заставить его работать должным образом, кроме как с этим громоздким синтаксисом.

var data = new NameValueCollection
        {
            ["token"] = "token", // Removed my actual token from here obviously
            ["channel"] = "channel", // Same with the channel
            ["as_user"] = "true",
            ["text"] = "test message 2",
            ["attachments"] = "[{\"fallback\":\"dummy\", \"text\":\"this is an attachment\", \"color\":\"#F35A00\", \"title\" : \"Title\", \"title_link\": \"http://www.google.com\"}]"
        };

var client = new WebClient();
var response = client.UploadValues("https://slack.com/api/chat.postMessage", "POST", data);

1 Ответ

0 голосов
/ 16 ноября 2018

«Громоздкий» синтаксис - это ручной JSON, и гораздо лучше было бы создать вложения в виде объектов C # и затем преобразовать их в JSON, как того требует API.

В моем примере используется внешнийбиблиотека Json.NET для преобразования JSON.

Пример для объекта C #:

// a slack message attachment
public class SlackAttachment
{
    public string fallback { get; set; }
    public string text { get; set; }
    public string image_url { get; set; }
    public string color { get; set; }
}

Пример создания нового массива attachments:

var attachments = new SlackAttachment[] 
{
    new SlackAttachment
    {
        fallback = "this did not work",
        text = "This is attachment 1",
        color = "good"
    },

    new SlackAttachment
    {
        fallback = "this did not work",
        text = "This is attachment 2",
        color = "danger"
    }
};

Наконец, преобразование массива attachments в JSON для API:

var attachmentsJson = JsonConvert.SerializeObject(attachments);

См. Также этот ответ для полного примера.

...