Я использую restsharp в качестве HTTP-клиента, и я не знаю, как сделать так, чтобы ответ API возвращался как конкретная модель, или он может быть возвращен как строка или что-то в этом роде, я знаю, что я использую async/ ждите, но как это сделать правильно для моего требования

  //my api model
     class ApiModel
    {
        public string Content { get; set; }
    }


      // api call
       public static async Task ApiCall()
        {
            
            var client = new RestClient("https://google.com/");
            var request = new RestRequest("api/get_something", Method.Get);
            var response = await client.GetAsync(request);
            // i want to return like this 
            var customRes = new ApiModel();
            customRes.Content = response.Content;
            return customRes;

        }
-2
AGK 26 Янв 2022 в 16:44
Task<ApiModel>?
 – 
Llama
26 Янв 2022 в 16:47
Да, я пытаюсь это сделать, но не возвращается как моя модель, он возвращает весь объект как System.Threading.Task
 – 
AGK
26 Янв 2022 в 17:01

2 ответа

Вам нужно десериализовать ответ

public static async Task<ActionResult<ApiModel>> ApiCall()
{
 .... your code
  var response = await client.GetAsync(request);
if (response.IsSuccessStatusCode)
    {
        var json =  response.Content;
        var result = JsonConvert.DeserializeObject<ApiModel>(json);
        return  Ok(result)

         //or you have to post API model, I can only guess
       
        return Ok( new ApiModel { Content= ... I dont know what});

    }    
          
   return BadRequest();
}
0
Serge 26 Янв 2022 в 17:28
Это дает мне ошибку, например, «строка» не содержит определения для «ReadAsStringAsync», и не может быть найден доступный метод расширения «ReadAsStringAsync», принимающий первый аргумент типа «строка».
 – 
AGK
26 Янв 2022 в 17:23
Я исправил свой ответ. Пожалуйста, опубликуйте свою модель API. Я не знаю, какой там контент. И почему вы не используете http client, как это рекомендуется?
 – 
Serge
26 Янв 2022 в 17:29
Я не думаю, что OP размещает веб-API, поэтому вызовы Ok(), возможно, придется заменить простыми возвратами.
 – 
John Glenn
26 Янв 2022 в 17:43
1
Спасибо за отзыв. Я добавил его, так как OP не имеет проверки ошибок и не возвращает никаких сообщений об ошибках.
 – 
Serge
26 Янв 2022 в 17:59
  public static async Task<ApiModel> ApiCall(){

var client = new RestClient("https://google.com/");
var request = new RestRequest("api/get_something", Method.Get);
var result = client.Execute<ApiModel>(request).Data;
return result ;
}
0
Amjad Saab 26 Янв 2022 в 17:31
1
'string' не содержит определения для 'ReadAsStringAsync', и не удалось найти доступный метод расширения 'ReadAsStringAsync', принимающий первый аргумент типа 'string' @amjad
 – 
AGK
26 Янв 2022 в 16:54
1
RestClient != HttpClient
 – 
Llama
26 Янв 2022 в 17:02
Я редактирую ответ. вы можете проверить это, если это работает для вас?
 – 
Amjad Saab
26 Янв 2022 в 17:16
Нет, не работает!
 – 
AGK
26 Янв 2022 в 17:30