【发布时间】:2018-12-03 15:30:21
【问题描述】:
当我使用这个方法时:
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”才能发送带有我的请求的文件。
有人知道这里出了什么问题吗?为什么它不喜欢一种内容类型而是另一种?非常感谢您的提示和想法!
【问题讨论】:
-
尚未使用 slack api,但我想知道您是否不应该将您创建的请求也设置为您的 UploadFileAsync 函数中的多部分
-
将
JsonConvert与JsonObject一起使用有什么意义?你知道什么是调试吗?你至少记录了var Json吗? -
@FrancoPettigrosso - 没有粗话... @Selvin - 非常有帮助,谢谢。 @bradbury9 - 老实说,我不能说,我一直在这个代码的旧版本中使用这个方法就好了。但在旧版本中,我没有使用 Newtonsoft 的 NuGet 包序列化为 Json,而是使用
Dictionary<string,string>序列化我的对象......还有其他想法吗?我的意思是这显然与我的 JSonObjects 相关...... -
@FabianHeld 在 MainArea 类的 main 方法中,你有 'ass'