RestSharp AddFile с использованием ключа и изображения в C# - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь использовать службу отдыха, которая получает изображение с ключом. Я использую RestSharp v.106.10.1 в Visual Studio 2017. У меня есть следующий код, который при выполнении возвращает сообщение с ответом сервера, в котором говорится, что пакет прибыл без изображения. Можете ли вы помочь мне в том, что я делаю не так?

1002 * Это мой код
var client = new RestClient("http://localhost:3030/api/upload-image");
    client.Timeout = -1;
    var request = new RestRequest(Method.POST);
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddFile("images", "/C:/Users/Desktop/AppTestWM/ServidorFTP/450_1000.jpg");
    IRestResponse response = client.Execute(request);
    Console.WriteLine(response.Content);

Способ отправки из почтальона заключается в следующем. заголовок contentType: application / x- www-form-urlencoded и тело в данных формы добавило ключ «image» и файл изображения.

Это формат заголовка

введите изображение описание здесь

Это формат тела

введите описание изображения здесь

БОЛЬШЕ ИНФОРМАЦИИ

Это хорошая почтовая консоль ответ

POST http://localhost: 3000 / imagenSoliTag / upload-image

• ▶ Сеть

▶ Запросить заголовки

Пользователь -Агент: PostmanRuntime / 7.24.1

Принимать: /

Контроль кэша: без кэша

Почтальон-токен: 44761995-f969-417d-9216-c98d2ee38b35

Хост: localhost: 3000

Accept-Encoding: gzip, deflate, br

Соединение: keep-alive

Тип содержимого: multipart / form- данные; border = ------------------------- -505415277809498326289672

Длина содержимого: 20233

• ▶ Тело запроса

▶ image: {…}

_events: {}

_eventsCount: 3

▶ _readableState: {…}

autoClose : true

bytesRead: 20022

закрыто: true

домен: null

fd: null

flags: "r"

режим: 438

путь: "C: \ Users \ Desktop \ AppTestWM \ ServidorFTP \ 450_1000.jpg"

читаемый: false

▶ Заголовки ответа

X-Powered-By: Express

Тип содержимого: application / json; charset = utf-8

Content-Length: 71

ETag: W / "47-DTIxeI6y0HsQCMVrZcYol72rDDs"

Дата: вс, 19 апреля 2020 23:42:08 GMT

Соединение: keep-alive

• ▶ Ответное тело

ответ: "¡Imagen guardada con éxito!"

imagePath: "450_1000.jpg"

Это плохой ответ консоли почтальона, когда он делает запрос без изображения

POST http://localhost: 3000 / imagenSoliTag / upload-image

• ▶ Сеть

▶ Заголовки запросов

Пользователь-агент: PostmanRuntime / 7.24.1

Принимать: /

Контроль кэша: без кэширования

Почтальон-токен: 9903417e-e3f0-467e-a185-046a1043ba45

Хост: localhost: 3000

Прием-кодировка: gzip, deflate, br

Подключение: keep-alive

Длина содержимого: 0

• Тело запроса

▶ Заголовки ответа

X-Powered-By: Express

Content-Type: application / json; charset = utf-8

Длина содержимого: 50

ETag: W / "32-Z / sIWz99etyVziu3PXRpXUZOG6 c"

Дата: солнце, 19 апреля 2020 г. 23 : 44: 07 GMT

Соединение: keep-alive

• ▶ Тело ответа

statusCode: 400

сообщение: «¡Elija una imagen!»

Это отладка Visual Studio в Запросе

введите описание изображения здесь

и в Отладке Ответа это

введите описание изображения здесь

1 Ответ

0 голосов
/ 19 апреля 2020

Ответ на ваш вопрос.

См. Тип контента, отправленный почтальоном:

enter image description here

И это запрос, который вы публикуете с помощью RestSharp (собран с использованием Fiddler 4 )

POST /api/upload-image HTTP/1.1
Accept: application/json, text/json, text/x-json, text/javascript, application/xml, text/xml
User-Agent: RestSharp/106.0.0.0
Content-Type: application/x-www-form-urlencoded; boundary=-----------------------------28947758029299
Host: oguzozgul.com.tr
Content-Length: 19006
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

На самом деле он пытается отправить форму с использованием границ, но вы заставляете ее отправлять заголовок Content-Type as application/x-www-form-urlencoded

Установить заголовок Content-Type как multipart / form-data или (работает с последней версией), позволить RestSharp автоматически установить Content-Type, не заставляя его использовать указанный c (и неверно) один: (Оператор, устанавливающий заголовок Content-Type, удаляется:)

var client = new RestClient("http://localhost:3030/api/upload-image");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "multipart/form-data");
request.AddFile("images", "/C:/Users/Desktop/AppTestWM/ServidorFTP/450_1000.jpg");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
...