Изменение кода RESTSharp POST на. NET HttpClient - PullRequest
0 голосов
/ 19 апреля 2020

Я немного борюсь с запросом RestSharp POST, который мне нужно изменить, чтобы использовать вместо него HttpClient. Это особый случай, когда мне нужно отправить HTML разметку на Memsource , чтобы создать новую работу по переводу. У меня это работает в Postman, где я могу получить пример кода как запрос RestSharp, но в своей кодовой базе я использую HttpClient.

Пример кода RestSharp в Postman выглядит следующим образом:

var client = new RestClient("https://cloud.memsource.com/web/api2/v1/projects/<myProjectId>/jobs?token=<myAuthToken>");
client.Timeout = -1;

var request = new RestRequest(Method.POST);

request.AddHeader("Content-Disposition", "filename=\"translation.html\"");
request.AddHeader("Memsource", "{\"targetLangs\": [\"da\", \"de\", \"de-AT\", \"de-BE\"]}");
request.AddHeader("Content-Type", "application/octet-stream");

request.AddParameter("application/octet-stream", "<!doctype html>\r\n<html lang=\"en\">\r\n<head>\r\n  
<meta charset=\"utf-8\">\r\n  <title>My page</title>\r\n  <meta name=\"viewport\" 
content=\"width=device-width, initial-scale=1\">\r\n</head>\r\n<body>\r\n\t<h1>My page</h1>\r\n\t<p>This is a paragraph<br />That needs to be translated</p>\r\n</body>\r\n</html>",  ParameterType.RequestBody);

IRestResponse response = client.Execute(request);

Console.WriteLine(response.Content);

Моя попытка с HttpClient в настоящее время такова:

string previewMarkup = "" // omitted markup for readability in this post

var targetLangs = new { targetLangs = new[] { "da", "de", "de-AT", "de-BE" } };
string targetLanguagesParamJson = JsonConvert.SerializeObject(targetLangs);

HttpContent httpContent = new StringContent(previewMarkup, Encoding.UTF8, MediaTypeNames.Text.Html);

httpContent.Headers.Add("Content-Disposition", "filename=\"translation.html\"");
httpContent.Headers.Add("Memsource", targetLanguagesParamJson);
httpContent.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Octet);

HttpResponseMessage httpResponseMessage = await _httpClient.PostAsync("https://cloud.memsource.com/web/api2/v1/projects/<myProjectId>/jobs?token=<myAuthToken>", httpContent, cancellationToken);

Я получаю следующую ошибку: The format of value 'filename="translations.html"' is invalid.

Кто-нибудь знает, что я могу пропустить здесь?

Заранее спасибо.

...