0

我正在尝试通过 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;

我做错了什么?

4

2 回答 2

0

1 看起来您缺少带有名称文件的标题, 这也是必需的

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

2 内容类型

webRequest.ContentType = "application/json";

3个额外的设置?

也许您还应该设置 request.UserAgent 和/或 request.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;
于 2013-08-08T17:09:42.943 回答
0

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

您可能想要使用更高级别的 csharp 构造(例如 MultipartFormDataContent 如果您有 .NET 4.5)。在 Java 中,最后是:https ://github.com/jenkinsci/testflight-plugin/blob/master/src/main/java/testflight/TestflightUploader.java 。

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

于 2013-08-13T09:59:17.347 回答