2012-05-08 7 views
1

Я пытаюсь загрузить API загрузки TestFlight для автоматизации сборки. Вот их документация: https://testflightapp.com/api/doc/Использование параметров WebRequest для POST и данных для TestFlight

Это запрос командной строки в минималистском локон, что я проверил и он работает:

.\curl.exe http://testflightapp.com/api/builds.json 
    -F [email protected] 
    -F api_token='myapitoken' -F team_token='myteamtoken' 
    -F notes='curl test' 

Я попытался преобразовать это в C# как это:

var uploadRequest = WebRequest.Create("http://testflightapp.com/api/builds.json") as HttpWebRequest; 
uploadRequest.Method = "POST"; 
uploadRequest.ContentType = "multipart/form-data"; 

var postParameters = string.Format("api_token={0}&team_token={1}&notes=autobuild&file=", TESTFLIGHT_API_TOKEN, TESTFLIGHT_TEAM_TOKEN); 
var byteParameters = Encoding.UTF8.GetBytes(postParameters); 

var ipaData = File.ReadAllBytes(IPA_PATH); 

uploadRequest.ContentLength = byteParameters.Length + ipaData.Length; 
var requestStream = uploadRequest.GetRequestStream(); 
requestStream.Write(byteParameters, 0, byteParameters.Length); 
requestStream.Write(ipaData, 0, ipaData.Length); 
requestStream.Close(); 

var uploadResponse = uploadRequest.GetResponse(); 

К сожалению, на GetResponse() Я получаю (500) Internal Server Error и не более подробную информацию.

Я не уверен, что данные в моих postParameters должны быть обернуты ' или нет. Я пробовал это в обоих направлениях. Я также не знаю, подходит ли мой тип контента. Я также пробовал application/x-www-form-urlencoded, но это не имело никакого эффекта.

Любая помощь очень ценится.

+1

Это может помочь вам http://stackoverflow.com/questions/219827/multipart-forms-from-c-sharp-client Вы должны различать детали, так как это многопользовательский запрос –

+0

Спасибо - после вашей ссылки trail взяла меня на restsharp, http://restsharp.org/, что позволило мне выполнить запрос в 13 строк без пробелов! – tenpn

ответ

2

Благодаря комментарию Adrian Iftode «s, я нашел RestSharp, что позволило мне осуществить запрос, как это:

var testflight = new RestClient("http://testflightapp.com"); 

var uploadRequest = new RestRequest("api/builds.json", Method.POST); 

uploadRequest.AddParameter("api_token", TESTFLIGHT_API_TOKEN); 
uploadRequest.AddParameter("team_token", TESTFLIGHT_TEAM_TOKEN); 
uploadRequest.AddParameter("notes", "autobuild"); 

uploadRequest.AddFile("file", IPA_PATH); 

var response = testflight.Execute(uploadRequest); 
System.Diagnostics.Debug.Assert(response.StatusCode == HttpStatusCode.OK, 
      "Build not uploaded, testflight returned error " + response.StatusDescription); 

Если вы делаете приложение пользовательский интерфейса, RestSharp может также сделать асинхронное выполнение. Проверьте документы по ссылке выше!

Смежные вопросы