Проблема с включением файла в POST multipart / form-data с использованием RestSharp - PullRequest
0 голосов
/ 14 мая 2019

Я относительно новичок в веб-взаимодействиях с C #, и у меня возникли некоторые проблемы с выполнением запроса POST для загрузки файла с помощью API.API принимает файлы только как часть раздела multipart / form-data в теле.По совету других, я пытался использовать RestSharp для этого, но я не могу получить сам файл в POST.Куски кода, полученные из предложенного Постманом кода, - где работает POST.

Я пробовал несколько вещей.Этот фрагмент привел к тому, что POST прошел с правильным параметром в теле, но файл не был включен.

var client = new RestClient(postURL);
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", string.Format("------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"upfile\"; filename=\"{0}\"\r\nContent-Type: application/xml\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"overwrite\"\r\n\r\ntrue\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", xmlPath), ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
string test = response.Content.ToString();

Я также попробовал несколько вариантов AddFile - физический путь к файлу, байтовый массив и байтовый массив с типом содержимого = application / xml.С помощью этих итераций я смог получить файл для публикации, но параметр перезаписи не был правильно введен для принудительной перезаписи файла.

var client = new RestClient(postURL);
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
// The different part below
request.AddFile("upfile", @xmlPath);
request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"overwrite\"\r\n\r\ntrue\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
string test = response.Content.ToString();

* примечание: я использую более старую версиюRestSharp (105.2.3) должен быть совместим с .Net 4.0 (в этом случае он застрял).

Есть идеи, что я здесь не так делаю?

1 Ответ

1 голос
/ 14 мая 2019

Понял это после сна на нем, в конце концов, все было очень просто.Все лишние webkit и многокомпонентные вещи, которые бросали меня в цикл, совершенно не нужны - кажется, что автоматически сгенерированный код из Postman слишком сложен.

var client = new RestClient(postURL);
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
request.AddFile("upfile", @xmlPath);
request.AddParameter("overwrite", "true", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
string test = response.Content.ToString();
...