尝试发布到Slack-API时为什么会出现“ invalid_form_data”错误?

时间:2018-12-03 15:30:22

标签: c# json slack-api

当我使用这种方法时:

public async Task<HttpResponseMessage> UploadFileAsync(MultipartFormDataContent requestContent)
{
    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, UriMethod);
    request.Content = requestContent;
    var response = await _httpClient.SendAsync(request);

    return response;
}

我总是得到答案:

{"ok":false,"error":"invalid_form_data"}

所以我试图明确地告诉它'mediaType',我尝试了“ application / json”和其他,但是所有这些我都得到了相同的错误。这是调用上层方法的完整Main方法:

    namespace TestArea
    {
        class MainArea
        {
            public static void Main( string[] args)
            {
                try
                {
                    Task.WaitAll(SendMessage());
                }
                catch(Exception ex)
                {
                    Console.WriteLine(ex);
                    Console.ReadKey();
                }
            }

 private static async Task SendMessage()
    {
        var client = new BpsHttpClient("https://slack.com/api/chat.postMessage");
        JsonObject JO = new JsonObject();
        JO.channel = "DCW21NBHD";
        JO.text = "This is so much fun :D !";
        var Json = JsonConvert.SerializeObject(JO, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });

        var StringJson = new StringContent(Json, Encoding.UTF8, "application/json");

        var requestContent = new MultipartFormDataContent();
        requestContent.Add(StringJson);

        var Response = await client.UploadFileAsync(requestContent);

        string AnswerContent = await Response.Content.ReadAsStringAsync();

    }

当我使用这种方法时:

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

    return response;
}

因此,基本上,我在其中传递了“ FormUrlEncodedContent”而不是“ MultipartFormDataContent”,然后我得到了想要的响应并且可以使用它。但对我来说这没什么用,因为我必须使用“ MultipartFormDataContent”才能发送带有请求的文件。

任何人都知道这里失败了吗?为什么它不喜欢一种内容类型,而是另一种?我将不胜感激小费和想法!

1 个答案:

答案 0 :(得分:1)

由于API方法chat.postMessage不支持对multipart/form-data的请求,因此会出现错误“ invalid_form_data”。

documentation的“接受的内容类型”下可以看到,此方法仅接受:application/x-www-form-urlencodedapplication/json

请注意,您无法将文件上传到chat.postMessage

如果要上传文件,请使用API​​方法files.upload,该方法也支持multipart/form-data

另请参阅我的答案here,了解如何上传带注释的文件。