Newtonsoft.Json

ужна помощь с загрузкой файлов в Slack.

У меня есть Slack-приложение, которое до сих пор работает с моим кодом (ниже). Но все, что я могу сделать, это отправлять сообщения. Я не могу прикрепить изображения к сообщениям - потому что я не понимаю, как использовать так называемые «методы», а синтаксис Slack «показывает» на их API-странице.

Это создает мой «контент» и ниже его просто поток для чтения файла, который я мог загрузить:

    public class PostMessage
    {


        public FormUrlEncodedContent Content(string message, string file)
        {
            var values = new Dictionary<string, string>
            {
                {"token", "xoxp-myToken"},
                { "username", "X"},         
                { "channel", "myChannel"},
                { "as_user", "false"},     
                {"text", message},
                { "content", file},
                { "attachments","[{ \"fallback\":\"dummy\", \"text\":\"this is a waste of time\"}]"}
            };

            var content = new FormUrlEncodedContent(values);

            return content;
        }
    }

    public class PostFile
    {
        String path = @"C:\Users\f.held\Desktop\Held-Docs\dagged.jpg";

        public string ReadImageFile()
        {            
            FileInfo fileInfo = new FileInfo(path);
            long imageFileLength = fileInfo.Length;
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            byte[] imageData = br.ReadBytes((int)imageFileLength);
            var str = Encoding.Default.GetString(imageData);
            return str;
        }
    }
}  

Клиент, который общается:

public class SlackClient
{
        private readonly Uri _webhookUrl;
        private readonly HttpClient _httpClient = new HttpClient {};

        public SlackClient(Uri webhookUrl)
        {
            _webhookUrl = webhookUrl;
        }

        public async Task<HttpResponseMessage> SendMessageAsync(FormUrlEncodedContent content)
        {
            var response = await _httpClient.PostAsync(_webhookUrl, content);

            return response;
        }    
     }
}

Главный:

public static void Main(string[] args)
{
    Task.WaitAll(IntegrateWithSlackAsync());
}

private static async Task IntegrateWithSlackAsync()
{
    var webhookUrl = new Uri("https://slack.com/api/files.upload");
    var slackClient = new SlackClient(webhookUrl);
    PostMessage PM = new PostMessage();
    PostFile PF = new PostFile();


    while (true)
    {
        Console.Write("Type a message: ");
        var message = Console.ReadLine();
        var testFile = PF.ReadImageFile();
        FormUrlEncodedContent payload = PM.Content(message, testFile);
        var response = await slackClient.SendMessageAsync(payload);
        var isValid = response.IsSuccessStatusCode ? "valid" : "invalid";
        Console.WriteLine($"Received {isValid} response.");
        Console.WriteLine(response);
        response.Dispose();
    }
}

}}

Если у кого-то есть пример того, как должна выглядеть загрузка. Или даже лучше,

если бы кто-то действительно мог объяснить синтаксис, который должны иметь эти Slack-сообщения.

Это было бы прекрасно! Я до сих пор не знаю, где и как я должен поставить так называемый«Допустимые типы контента: multipart / form-data, application / x-www-form-urlencoded» к моей загрузке. Я просто не могу найти примеры по этому ...

Редактировать:

Что меня смущает, так это то, что Slack утверждает, что у них есть дополнительный метод, называемыйfile.upload - но мы не должны использовать его больше, мы должны использовать толькоpostMessage.

Но как мне «упаковать» файл в сообщение? Мой синтаксис всегда выключен. Особенно, когда речь идет о «контенте» ... Я просто не могу понять, как должен выглядеть код c #. Где я могу объявить вышеупомянутый «тип контента»?

Другая проблема заключается в том, что он всегда отправляет мои сообщения - значит, я получаю 200-ответ от сервера. Но он никогда не показывает файл (что, вероятно, означает, что синтаксис выключен) Или я получаю 200-ответ, но сообщение никогда не отображается в Slack.

Ответы на вопрос(3)

Ваш ответ на вопрос