对TestFlight Api的POST请求失败,返回500

本文关键字:失败 返回 请求 POST TestFlight Api | 更新日期: 2023-09-27 18:26:51

我正试图通过POST请求将文件上传到TestFlight Api。我试着尽可能简单地做,但我仍然得到错误500。

HttpWebRequest request = WebRequest
    .Create('http://testflightapp.com/api/builds.json') as HttpWebRequest;
request.KeepAlive = false;
request.Headers.Add("api_token", "####");
request.Headers.Add("team_token", "####");
request.Headers.Add("notes", "notes");
request.ContentType = "multipart/form-data";
request.Method = WebRequestMethods.Http.Post;
byte[] messageArray = File.ReadAllBytes(filePath);
request.ContentLength = messageArray.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(messageArray, 0, messageArray.Length);
requestStream.Close();
WebResponse response = request.GetResponse();
StreamReader responseReader = new StreamReader(response.GetResponseStream());
string result = responseReader.ReadToEnd();
responseReader.Close();
response.Close();
return result;

我做错了什么?

对TestFlight Api的POST请求失败,返回500

这不是以编程方式构建多部分表单的方法。您混合了标题和内容,没有遵循正确的多部分分隔符,甚至没有命名部分,错误地计算内容长度等。请参阅csharp中的c#multipart/form数据以编程方式提交以获取帮助。

您可能想要使用更高级别的csharp构造(如果您有.NET 4.5,则类似于MultipartFormDataContent)https://github.com/jenkinsci/testflight-plugin/blob/master/src/main/java/testflight/TestflightUploader.java.

如果你想自己做,我真的建议你,例如,使用curl进行上传,使用wiresharp提取TCP对话,并比较curl在做什么和我们做什么。

1看起来缺少名为文件的Header这也是必需的

https://testflightapp.com/api/doc/#

2内容类型

webRequest.ContentType = "application/json";

3个额外设置?

也许你也应该设置请求。UserAgent和/或请求。AllowWriteStreamBuffering

request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
request.AllowWriteStreamBuffering = true;