当我使用这种方法时:
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”才能发送带有请求的文件。
任何人都知道这里失败了吗?为什么它不喜欢一种内容类型,而是另一种?我将不胜感激小费和想法!
答案 0 :(得分:1)
由于API方法chat.postMessage
不支持对multipart/form-data
的请求,因此会出现错误“ invalid_form_data”。
从documentation的“接受的内容类型”下可以看到,此方法仅接受:application/x-www-form-urlencoded
,application/json
请注意,您无法将文件上传到chat.postMessage
。
如果要上传文件,请使用API方法files.upload
,该方法也支持multipart/form-data
。
另请参阅我的答案here,了解如何上传带注释的文件。