Как читать ответы webapi с помощью HttpClient на C#C#

Место общения программистов C#
Ответить
Anonymous
 Как читать ответы webapi с помощью HttpClient на C#

Сообщение Anonymous »

Я разработал небольшой веб-приложение, которое имеет несколько действий и возвращает мой собственный класс под названием Response.
Класс Response

Код: Выделить всё

public class Response
{
bool IsSuccess=false;
string Message;
object ResponseData;

public Response(bool status, string message, object data)
{
IsSuccess = status;
Message = message;
ResponseData = data;
}
}
Мой вебапи с действиями

Код: Выделить всё

[RoutePrefix("api/customer")]
public class CustomerController : ApiController
{
static readonly ICustomerRepository repository = new CustomerRepository();

[HttpGet, Route("GetAll")]
public Response GetAllCustomers()
{
return new Response(true, "SUCCESS", repository.GetAll());
}

[HttpGet, Route("GetByID/{customerID}")]
public Response GetCustomer(string customerID)
{
Customer customer = repository.Get(customerID);
if (customer == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return new Response(true, "SUCCESS", customer);
//return Request.CreateResponse(HttpStatusCode.OK, response);
}

[HttpGet, Route("GetByCountryName/{country}")]
public IEnumerable GetCustomersByCountry(string country)
{
return repository.GetAll().Where(
c => string.Equals(c.Country, country, StringComparison.OrdinalIgnoreCase));
}
}
Теперь я застрял в том, что не знаю, как читать данные ответа, возвращаемые в результате действий webapi, и извлекать json из моего класса ответа. После получения json, как я могу десериализовать этот json в класс клиента.
Вот как я вызываю свою функцию webapi:

Код: Выделить всё

private void btnLoad_Click(object sender, EventArgs e)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:8010/");
// Add an Accept header for JSON format.
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// List all Names.
HttpResponseMessage response = client.GetAsync("api/customer/GetAll").Result;  // Blocking call!
if (response.IsSuccessStatusCode)
{
Console.WriteLine("Request Message Information:- \n\n" + response.RequestMessage + "\n");
Console.WriteLine("Response Message Header \n\n" + response.Content.Headers + "\n");
}
else
{
Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
}
Console.ReadLine();
}
Вопросы
  • Как получить класс ответа, который webapi возвращает на стороне клиента
  • Как извлечь JSON из класса ответа
  • Как десериализовать JSON в класс клиента на стороне клиента
Я использую этот код, но все равно получаю сообщение об ошибке.

Код: Выделить всё

    var baseAddress = "http://localhost:8010/api/customer/GetAll";
using (var client = new HttpClient())
{
using (var response =  client.GetAsync(baseAddress).Result)
{
if (response.IsSuccessStatusCode)
{
var customerJsonString = await response.Content.ReadAsStringAsync();
var cust = JsonConvert.DeserializeObject(customerJsonString);
}
else
{
Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
}
}
}
Ошибка:

В Newtonsoft.Json произошло исключение типа Newtonsoft.Json.JsonSerializationException. dll, но не обрабатывался в пользовательском коде.
Дополнительная информация: невозможно десериализовать текущий объект JSON (например, {"name":"value"}) в тип 'WebAPIClient.Response[]', поскольку для корректной десериализации типа требуется массив JSON (например, [1,2,3]).

Почему ответ вызывает эту ошибку?

Подробнее здесь: https://stackoverflow.com/questions/391 ... in-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»