/// <summary>
/// Modelo UserModel.
/// </summary>
public class UserModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
/// <summary>
/// Servicio UserService.
/// </summary>
public class UserService
{
private readonly HttpClient httpClient;
public UserService()
{
httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://jsonplaceholder.typicode.com/");
}
/// <summary>
/// Método para obtener todos los usuarios.
/// </summary>
/// <returns>Listado con todos los usuarios obtenidos.</returns>
public async Task<List<UserModel>> GetUsers()
{
HttpResponseMessage response = await httpClient.GetAsync("users");
response.EnsureSuccessStatusCode();
List<UserModel> users = await response.Content.ReadAsAsync<List<UserModel>>();
return users;
}
/// <summary>
/// Método para obtener un usuario filtrando por su id.
/// </summary>
/// <param name="id">Identificador del usuario.</param>
/// <returns>Usuario obtenido.</returns>
public async Task<UserModel> GetUser(int id)
{
HttpResponseMessage response = await httpClient.GetAsync($"users/{id}");
response.EnsureSuccessStatusCode();
UserModel user = await response.Content.ReadAsAsync<UserModel>();
return user;
}
/// <summary>
/// Método para crear un usuario nuevo.
/// </summary>
/// <param name="user">Usuario con los datos informados.</param>
/// <returns>Usuario creado.</returns>
public async Task<UserModel> CreateUser(UserModel user)
{
HttpResponseMessage response = await httpClient.PostAsJsonAsync("users", user);
response.EnsureSuccessStatusCode();
UserModel createdUser = await response.Content.ReadAsAsync<UserModel>();
return createdUser;
}
/// <summary>
/// Método para modificar un usuario existente.
/// </summary>
/// <param name="id">Identificador del usuario.</param>
/// <param name="user">Usuario con los datos informados.</param>
/// <returns>Usuario modificado.</returns>
public async Task<UserModel> UpdateUser(int id, UserModel user)
{
HttpResponseMessage response = await httpClient.PutAsJsonAsync($"users/{id}", user);
response.EnsureSuccessStatusCode();
UserModel updatedUser = await response.Content.ReadAsAsync<UserModel>();
return updatedUser;
}
/// <summary>
/// Método para eliminar un usuario.
/// </summary>
/// <param name="id">Identificador del usuario.</param>
/// <returns>Booleano para indicar si el usuari ha sido eliminado (true) o no (false).</returns>
public async Task<bool> DeleteUser(int id)
{
HttpResponseMessage response = await httpClient.DeleteAsync($"users/{id}");
return response.IsSuccessStatusCode;
}
}
/// <summary>
/// Clase Program.
/// </summary>
public class Program
{
/// <summary>
/// Método Main.
/// </summary>
/// <returns></returns>
public static async Task Main()
{
UserService userService = new UserService();
// Obtener todos los usuarios.
List<UserModel> users = await userService.GetUsers();
foreach (UserModel user in users)
{
Console.WriteLine($"ID: {user.Id}, Nombre: {user.Name}, Email: {user.Email}");
}
// Obtener un usuario por su ID.
int userId = 1;
UserModel userById = await userService.GetUser(userId);
Console.WriteLine($"ID: {userById.Id}, Nombre: {userById.Name}, Email: {userById.Email}");
// Crear un nuevo usuario.
UserModel newUser = new UserModel
{
Name = "John Doe",
Email = "johndoe@example.com"
};
UserModel createdUser = await userService.CreateUser(newUser);
Console.WriteLine($"ID: {createdUser.Id}, Nombre: {createdUser.Name}, Email: {createdUser.Email}");
// Actualizar un usuario existente.
UserModel editUser = new UserModel
{
Id = 1,
Name = "John Doe Smith",
Email = "johnsmith@example.com"
};
UserModel updatedUser = await userService.UpdateUser(1, editUser);
Console.WriteLine($"ID: {updatedUser.Id}, Nombre: {updatedUser.Name}, Email: {updatedUser.Email}");
// Eliminar un usuario.
int userIdToDelete = 1;
var hasDeleted = await userService.DeleteUser(userIdToDelete);
if (hasDeleted)
{
Console.WriteLine($"El usuario con ID {userIdToDelete} ha sido eliminado");
}
else
{
Console.WriteLine($"El usuario con ID {userIdToDelete} no ha sido eliminado");
}
Console.WriteLine();
Console.WriteLine("Presione cualquier tecla para salir...");
Console.ReadKey();
}
}
C#: CRUD básico con solicitudes HTTP (HttpClient)
Tiempo de lectura: 2 minutos