Я только что обновил свое приложение RestSharp до 107.1.2 и теперь не могу отправить почтовый запрос. Чтобы проверить проблему, я настроил небольшой веб-сервер express.js для получения запросов от моего приложения C#. На каждый почтовый запрос, который я делал, всегда нет доступного тела.

RestClientOptions options = new RestClientOptions("http://127.0.0.1:3000");
RestClient client = new RestClient(options);
RestRequest request = new RestRequest("api/test");
request.AddParameter("test1", "test1");
request.AddParameter("test2", "test2");
request.AddParameter("test3", "test3");
TestResponse response = await client.PostAsync<TestResponse>(request);

Код основан на документации QueryString https://restsharp.dev/usage.html#query- строка. И да, параметры запроса, который я получаю на веб-сервере, также пусты. Чтобы проверить простой почтовый запрос, я даже пробовал следующее:

RestClientOptions options = new RestClientOptions("http://127.0.0.1:3000");
RestClient client = new RestClient(options);
RestRequest request = new RestRequest("api/test");

const string json = "{ data: { foo: \"bar\" } }";
request.AddStringBody(json, ContentType.Json);
TestResponse response = await client.PostAsync<TestResponse>(request);

Я не могу найти проблему, почему запросы отправляются без фактического тела сообщения. В предыдущей версии, с которой я обновлялся, все работало нормально.

Надеюсь, ты сможешь мне помочь.

0
ChuckGod 26 Янв 2022 в 14:53

3 ответа

Не могли бы вы попробовать это:

request.RequestFormat = DataFormat.Json;

request.AddJsonBody(new { A = "foo", B = "bar" });

Или

const string json = "{ data: { foo: \"bar\" } }";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
0
Amjad Saab 26 Янв 2022 в 16:23
1
Спасибо за ваш ответ. request.AddJsonBody по-прежнему приводит к пустому телу по запросу. Content не является действительным членом RestRequest, поэтому оба варианта, к сожалению, не привели к успеху.
 – 
ChuckGod
26 Янв 2022 в 16:55
RestClientOptions options = new RestClientOptions("http://127.0.0.1:3000");
var client = new RestSharp.RestClient(options);
var request = new RestSharp.RestRequest(RestSharp.Method.POST);
request.RequestFormat = RestSharp.DataFormat.Json;
request.AddHeader("Content-Type", "application/json");
const string json = "{ data: { foo: \"bar\" } }";
request.AddBody(JsonConvert.SerializeObject(json));
var response = client.Execute(request);
0
Amjad Saab 26 Янв 2022 в 17:06
Спасибо. Тоже не работает. Также думайте, что ваш код основан на неправильной версии RestSharp. Как я уже упоминал, я использую последнюю версию 107.1.2. Методы синхронизации, такие как Execute, были удалены в последних версиях.
 – 
ChuckGod
26 Янв 2022 в 17:53

Попробуйте это пожалуйста

       RestClientOptions options = new RestClientOptions("http://127.0.0.1:3000");
       var restClient = new RestClient(options);

        var restRequest = new RestRequest(Method.POST)
        {
            RequestFormat = DataFormat.Json
        };

        const string json = "{ data: { foo: \"bar\" } }";
        request.AddBody(JsonConvert.SerializeObject(json));

        var result = restClient.Post<TResponse>(restRequest);

        if (!result.IsSuccessful)
        {
            throw new HttpException($"Item not found: {result.ErrorMessage}");
        }

        return result.Data;
0
Amjad Saab 26 Янв 2022 в 18:06