AYUDA .NET

RestSharp C# (Cómo funciona para desarrolladores)

Actualizado 14 de enero, 2024
Compartir:

Introducción

RestSharp es una popular biblioteca .NET de código abierto para realizar peticiones HTTP en C#. Simplifica el proceso de trabajar con API pacíficas, proporcionando una forma sencilla y flexible de comunicarse con los servicios web. En esta composición, exploraremos las características cruciales de RestSharp y IronPDF y le demostrará cómo puede calcular el coste de los datos e inducir un PDF.

¿Por qué RestSharp?

En las aplicaciones modernas de varios niveles, los distintos servicios tienen que comunicarse entre sí con mucha frecuencia y RestSharp ofrece una forma sencilla y eficaz, encapsulando todas las complejidades. Esto simplifica enormemente el proceso de desarrollo de software.

Instalar RestSharp

RestSharp está disponible como NuGet y puede instalarse en su diseño C#. Para ello se puede utilizar la consola del gestor de paquetes NuGet o la aplicación Visual Studio Interfaz de usuario del gestor de paquetes NuGet.

Install-Package RestSharp

Solicitudes GET sencillas

Comencemos con un ejemplo sencillo de realizar una solicitud GET a una API RESTful utilizando RestSharp. Supongamos que queremos recuperar información de una API pública de ASP.NET core que devuelve datos de usuario:

using RestSharp;
namespace rest_sharp_demo;
class Program
{
    static void Main()
    {
        //  Crear una instancia RestClient
        var baseUrl = "https://jsonplaceholder.typicode.com/users";
        RestClientOptions options = new RestClientOptions(baseUrl)
      {UseDefaultCredentials = true};
        var client = new RestClient(options);
        //  Crear una RestRequest para el método GET
        var request = new RestRequest();
        //  Ejecutar la solicitud y obtener la respuesta
        var response = client.Get(request);
        //  Comprobar si la solicitud se ha realizado correctamente
        if (response.IsSuccessful)
        {
            //  Imprimir el contenido del cuerpo de la respuesta
            Console.WriteLine(response.Content);
        }
        else
        {
            //  Gestionar el error
            Console.WriteLine($"Error: {response.ErrorMessage}");
        }
    }
    public void LogData(string msg)
    {
        Console.WriteLine(msg)
    }
}
using RestSharp;
namespace rest_sharp_demo;
class Program
{
    static void Main()
    {
        //  Crear una instancia RestClient
        var baseUrl = "https://jsonplaceholder.typicode.com/users";
        RestClientOptions options = new RestClientOptions(baseUrl)
      {UseDefaultCredentials = true};
        var client = new RestClient(options);
        //  Crear una RestRequest para el método GET
        var request = new RestRequest();
        //  Ejecutar la solicitud y obtener la respuesta
        var response = client.Get(request);
        //  Comprobar si la solicitud se ha realizado correctamente
        if (response.IsSuccessful)
        {
            //  Imprimir el contenido del cuerpo de la respuesta
            Console.WriteLine(response.Content);
        }
        else
        {
            //  Gestionar el error
            Console.WriteLine($"Error: {response.ErrorMessage}");
        }
    }
    public void LogData(string msg)
    {
        Console.WriteLine(msg)
    }
}
Imports RestSharp
Namespace rest_sharp_demo
	Friend Class Program
		Shared Sub Main()
			'  Crear una instancia RestClient
			Dim baseUrl = "https://jsonplaceholder.typicode.com/users"
			Dim options As New RestClientOptions(baseUrl) With {.UseDefaultCredentials = True}
			Dim client = New RestClient(options)
			'  Crear una RestRequest para el método GET
			Dim request = New RestRequest()
			'  Ejecutar la solicitud y obtener la respuesta
			Dim response = client.Get(request)
			'  Comprobar si la solicitud se ha realizado correctamente
			If response.IsSuccessful Then
				'  Imprimir el contenido del cuerpo de la respuesta
				Console.WriteLine(response.Content)
			Else
				'  Gestionar el error
				Console.WriteLine($"Error: {response.ErrorMessage}")
			End If
		End Sub
		Public Sub LogData(ByVal msg As String)
			Console.WriteLine(msg)
		End Sub
	End Class
End Namespace
VB   C#

RestSharp también admite solicitudes y respuestas asíncronas mediante los métodos de la API async.

Tratamiento de los datos de respuesta

RestSharp proporciona métodos prácticos para deserializar el contenido de la respuesta en objetos C#. Vamos a ampliar nuestro ejemplo para deserializar los datos de respuesta JSON en una lista de objetos de usuario:

//  Deserializar la respuesta JSON en una lista de objetos Usuario
var users = JsonSerializer.Deserialize<List<User>>(response.Content);
//  Información de salida del usuario
foreach (var user in users)
{
    Console.WriteLine($"User ID: {user.Id}, Name: {user.Name}, Email:{user.Email}");
}
//  Deserializar la respuesta JSON en una lista de objetos Usuario
var users = JsonSerializer.Deserialize<List<User>>(response.Content);
//  Información de salida del usuario
foreach (var user in users)
{
    Console.WriteLine($"User ID: {user.Id}, Name: {user.Name}, Email:{user.Email}");
}
'  Deserializar la respuesta JSON en una lista de objetos Usuario
Dim users = JsonSerializer.Deserialize(Of List(Of User))(response.Content)
'  Información de salida del usuario
For Each user In users
	Console.WriteLine($"User ID: {user.Id}, Name: {user.Name}, Email:{user.Email}")
Next user
VB   C#

En este ejemplo, hemos definido una clase Usuario con propiedades correspondientes a los campos JSON. Hemos utilizado "JsonSerializer.Deserialize" del namespace "System.Text.Json.Serialization".

public class User
{
[JsonPropertyName("company")]public Company Company { get; set; }
[JsonPropertyName("id")]public int Id { get; set; }
[JsonPropertyName("phone")]public string Phone { get; set; }
[JsonPropertyName("website")]public string Website { get; set; }
[JsonPropertyName("name")]public string Name { get; set; }
[JsonPropertyName("username")]public string Username { get; set; }
[JsonPropertyName("email")]public string Email { get; set; }
[JsonPropertyName("address")]public Address Address { get; set; }
}
public class User
{
[JsonPropertyName("company")]public Company Company { get; set; }
[JsonPropertyName("id")]public int Id { get; set; }
[JsonPropertyName("phone")]public string Phone { get; set; }
[JsonPropertyName("website")]public string Website { get; set; }
[JsonPropertyName("name")]public string Name { get; set; }
[JsonPropertyName("username")]public string Username { get; set; }
[JsonPropertyName("email")]public string Email { get; set; }
[JsonPropertyName("address")]public Address Address { get; set; }
}
Public Class User
<JsonPropertyName("company")>
Public Property Company() As Company
<JsonPropertyName("id")>
Public Property Id() As Integer
<JsonPropertyName("phone")>
Public Property Phone() As String
<JsonPropertyName("website")>
Public Property Website() As String
<JsonPropertyName("name")>
Public Property Name() As String
<JsonPropertyName("username")>
Public Property Username() As String
<JsonPropertyName("email")>
Public Property Email() As String
<JsonPropertyName("address")>
Public Property Address() As Address
End Class
VB   C#

Salida

Todos los userId y nombres se muestran en la salida.

RestSharp C# (Cómo funciona para desarrolladores): Figura 1 - Salida de Consola mostrando todos los IDs y Nombres de Usuarios.

El código completo está disponible en git aquí.

Tipo de contenido

RestSharp soporta el envío de peticiones con cuerpo XML o JSON. Los métodos AddJsonBody o AddXmlBody de la instancia RestRequest pueden utilizarse para añadir un cuerpo JSON o XML. RestSharp establecerá el tipo de contenido automáticamente.

RestSharp maneja respuestas JSON o XML automáticamente.

//utilizando RestSharp;
//  Serializar el objeto usuario a JSON
var jsonBodyString = JsonSerializer.Serialize(newUser);
//  Cree una RestRequest para el método POST con los datos de la solicitud JSON
var requestData = new RestRequest().AddJsonBody(jsonBodyString);
var response=client.ExecutePost(requestData);
//utilizando RestSharp;
//  Serializar el objeto usuario a JSON
var jsonBodyString = JsonSerializer.Serialize(newUser);
//  Cree una RestRequest para el método POST con los datos de la solicitud JSON
var requestData = new RestRequest().AddJsonBody(jsonBodyString);
var response=client.ExecutePost(requestData);
'utilizando RestSharp;
'  Serializar el objeto usuario a JSON
Dim jsonBodyString = JsonSerializer.Serialize(newUser)
'  Cree una RestRequest para el método POST con los datos de la solicitud JSON
Dim requestData = (New RestRequest()).AddJsonBody(jsonBodyString)
Dim response=client.ExecutePost(requestData)
VB   C#

Envío de datos con solicitudes POST

RestSharp también admite el envío de datos en el cuerpo de la solicitud, lo que es habitual al crear o actualizar recursos. Modifiquemos nuestro ejemplo para demostrar una API de solicitud POST:

using RestSharp;
var client = new RestClient("https://jsonplaceholder.typicode.com/users");
//  Nuevo objeto usuario
var newUser = new User
{
    Name = "John Doe",
    Email = "john.doe@example.com"
};
//  Serializar el objeto usuario a JSON
var jsonBody = JsonSerializer.Serialize(newUser);
//  Crear una RestRequest para el método POST con el cuerpo de la petición JSON
var request = new RestRequest().AddJsonBody(jsonBody);
if (response.IsSuccessful)
{
//  Imprimir el contenido de la respuesta
    Console.WriteLine(response.Content);
}
else
{
    Console.WriteLine($"Error: {response.ErrorMessage}");
}
using RestSharp;
var client = new RestClient("https://jsonplaceholder.typicode.com/users");
//  Nuevo objeto usuario
var newUser = new User
{
    Name = "John Doe",
    Email = "john.doe@example.com"
};
//  Serializar el objeto usuario a JSON
var jsonBody = JsonSerializer.Serialize(newUser);
//  Crear una RestRequest para el método POST con el cuerpo de la petición JSON
var request = new RestRequest().AddJsonBody(jsonBody);
if (response.IsSuccessful)
{
//  Imprimir el contenido de la respuesta
    Console.WriteLine(response.Content);
}
else
{
    Console.WriteLine($"Error: {response.ErrorMessage}");
}
Imports RestSharp
Private client = New RestClient("https://jsonplaceholder.typicode.com/users")
'  Nuevo objeto usuario
Private newUser = New User With {
	.Name = "John Doe",
	.Email = "john.doe@example.com"
}
'  Serializar el objeto usuario a JSON
Private jsonBody = JsonSerializer.Serialize(newUser)
'  Crear una RestRequest para el método POST con el cuerpo de la petición JSON
Private request = (New RestRequest()).AddJsonBody(jsonBody)
If response.IsSuccessful Then
'  Imprimir el contenido de la respuesta
	Console.WriteLine(response.Content)
Else
	Console.WriteLine($"Error: {response.ErrorMessage}")
End If
VB   C#

En este ejemplo, creamos un nuevo dato de objeto User, lo serializamos a JSON, y lo incluimos en el cuerpo de la petición usando el método AddJsonBody. El servidor recibe los datos JSON y procesa la solicitud en consecuencia

Salida

RestSharp C# (Cómo funciona para desarrolladores): Figura 2 - Salida de la consola

Autenticación

RestSharp también admite el envío de solicitudes con autenticación. Las RestClientOptions pueden incluir parámetros de autenticación.

var options = new RestClientOptions("https://auth.net"){Authenticator = new HttpBasicAuthenticator(_clientId, _clientSecret)};
var options = new RestClientOptions("https://auth.net"){Authenticator = new HttpBasicAuthenticator(_clientId, _clientSecret)};
Dim options = New RestClientOptions("https://auth.net") With {.Authenticator = New HttpBasicAuthenticator(_clientId, _clientSecret)}
VB   C#

Aquí estamos utilizando la autenticación básica clientId secret que se envía en cada solicitud.

Tratamiento de errores

RestSharp puede gestionar los errores que se producen durante las solicitudes URL, como los errores de tiempo de espera, autenticación o autorización. RestSharp no lanza una excepción si la petición falla automáticamente. Debe configurarse manualmente.

Se pueden realizar las siguientes configuraciones de tratamiento de errores.

  • FailOnDeserializationError: Establecer esta propiedad a true le dirá a RestSharp que considere la deserialización fallida como un error y establezca el ResponseStatus a Error en consecuencia.
  • LanzarEnErrorDeserialización: Establecer esta propiedad a true le dirá a RestSharp que lance cuando la deserialización falle.
  • LanzarEnCualquierError: Lanza Excepción si se produce algún error al realizar una petición o durante la deserialización.
var restClentOptions = new RestClientOptions(url) { ThrowOnAnyError = true };
var client = new RestClient(restClentOptions);
var restClentOptions = new RestClientOptions(url) { ThrowOnAnyError = true };
var client = new RestClient(restClentOptions);
Dim restClentOptions = New RestClientOptions(url) With {.ThrowOnAnyError = True}
Dim client = New RestClient(restClentOptions)
VB   C#

Presentación de IronPDF

IronPDF es una biblioteca PDF en C# de Iron Software que ayuda a leer y generar documentos PDF. Puede convertir fácilmente documentos formateados con información de estilo a PDF. IronPDF puede generar fácilmente PDFs a partir de contenido HTML, puede descargar el HTML desde la URL y luego generar PDFs

Instalar la biblioteca IronPDF

Biblioteca NuGet C# para PDF

Instalar con NuGet

Install-Package IronPdf
o
Java PDF JAR

Descargar DLL

Descargar DLL

Instalar manualmente en su proyecto

Instalación mediante el gestor de paquetes NuGet

Para integrar IronPDF en su proyecto Selenium RestSharp utilizando el gestor de paquetes NuGet, siga estos pasos:

  1. Abra Visual Studio y, en el explorador de soluciones, haga clic con el botón derecho del ratón en su proyecto.
  2. Seleccione "Gestionar paquetes NuGet..." en el menú contextual.
  3. Vaya a la pestaña Examinar y busque IronPDF.
  4. Seleccione la biblioteca IronPDF en los resultados de la búsqueda y haga clic en el botón Instalar.
  5. Acepte cualquier solicitud de acuerdo de licencia.

    Si desea incluir IronPDF en su proyecto a través de la consola del gestor de paquetes, ejecute el siguiente comando en la consola del gestor de paquetes:

Install-Package IronPdf

Buscará e instalará IronPDF en su proyecto.

Instalación mediante el sitio web de NuGet

Para obtener una descripción detallada de IronPDF, incluidas sus características, compatibilidad y opciones de descarga adicionales, visite la página de IronPDF en el sitio web de NuGet en https://www.nuget.org/packages/IronPdf.

Instalar mediante DLL

Como alternativa, puede incorporar IronPDF directamente a su proyecto utilizando su archivo dll. Descargue el archivo ZIP que contiene la DLL desde aquí enlace. Descomprímelo e incluye la DLL en tu proyecto.

Ahora vamos a obtener todos los usuarios y generar un informe PDF utilizando la cadena HTML y el generador IronPDF

using System.Text.Json;
using System.Text.Json.Serialization;
using RestSharp;
namespace rest_sharp_demo;
class Program
{
    static void Main()
    {
        //  Crear un RestClient 
        var baseUrl = "https://jsonplaceholder.typicode.com/users";
        RestClientOptions options = new RestClientOptions(baseUrl) { UseDefaultCredentials = true };
        var client = new RestClient(options);
        //  Crear una RestRequest para el método GET
        var request = new RestRequest();
        //  Ejecutar la solicitud y obtener la respuesta
        var response = client.Get(request);
        //  Comprobar si la solicitud se ha realizado correctamente
        if (response.IsSuccessful)
        {
            //  Deserializar la respuesta JSON en una lista de objetos Usuario
            var users = JsonSerializer.Deserialize<List<User>>(response.Content);
            //  Generar Pdf
            var html = GetHtml(users);
            var Renderer = new ChromePdfRenderer();
            var PDF = Renderer.RenderHtmlAsPdf(html);
            PDF.SaveAs("UsersReport.pdf");
        }
        else
        {
            //  Gestionar el error
            Console.WriteLine($"Error: {response.ErrorMessage}");
        }
    }
    private static string GetHtml(List<User>? users)
    {
        string header = $@"
<html>
<head><title>Users List</title></head>
<body>
    ";
        var footer = @"
</body>
</html>";
        var htmlContent = header;
        foreach (var user in users)
        {
            htmlContent += $@"
    <h1>{user.Name}</h1>
    <p>Username: {user.Username}</p>
    <p>Email: {user.Email}</p>
    <p>Company: {user.Company}</p>
    <p>Phone: {user.Phone}</p>
    <p>Website: {user.Website}</p>
    <p>Suite: {user.Address.Suite}</p>
    <p>Street: {user.Address.Street}</p>
    <p>City: {user.Address.City}</p>
    <p>Zipcode: {user.Address.Zipcode}</p>
";
        }
        htmlContent += footer;
        return htmlContent;
    }
}
using System.Text.Json;
using System.Text.Json.Serialization;
using RestSharp;
namespace rest_sharp_demo;
class Program
{
    static void Main()
    {
        //  Crear un RestClient 
        var baseUrl = "https://jsonplaceholder.typicode.com/users";
        RestClientOptions options = new RestClientOptions(baseUrl) { UseDefaultCredentials = true };
        var client = new RestClient(options);
        //  Crear una RestRequest para el método GET
        var request = new RestRequest();
        //  Ejecutar la solicitud y obtener la respuesta
        var response = client.Get(request);
        //  Comprobar si la solicitud se ha realizado correctamente
        if (response.IsSuccessful)
        {
            //  Deserializar la respuesta JSON en una lista de objetos Usuario
            var users = JsonSerializer.Deserialize<List<User>>(response.Content);
            //  Generar Pdf
            var html = GetHtml(users);
            var Renderer = new ChromePdfRenderer();
            var PDF = Renderer.RenderHtmlAsPdf(html);
            PDF.SaveAs("UsersReport.pdf");
        }
        else
        {
            //  Gestionar el error
            Console.WriteLine($"Error: {response.ErrorMessage}");
        }
    }
    private static string GetHtml(List<User>? users)
    {
        string header = $@"
<html>
<head><title>Users List</title></head>
<body>
    ";
        var footer = @"
</body>
</html>";
        var htmlContent = header;
        foreach (var user in users)
        {
            htmlContent += $@"
    <h1>{user.Name}</h1>
    <p>Username: {user.Username}</p>
    <p>Email: {user.Email}</p>
    <p>Company: {user.Company}</p>
    <p>Phone: {user.Phone}</p>
    <p>Website: {user.Website}</p>
    <p>Suite: {user.Address.Suite}</p>
    <p>Street: {user.Address.Street}</p>
    <p>City: {user.Address.City}</p>
    <p>Zipcode: {user.Address.Zipcode}</p>
";
        }
        htmlContent += footer;
        return htmlContent;
    }
}
Imports System.Text.Json
Imports System.Text.Json.Serialization
Imports RestSharp
Namespace rest_sharp_demo
	Friend Class Program
		Shared Sub Main()
			'  Crear un RestClient 
			Dim baseUrl = "https://jsonplaceholder.typicode.com/users"
			Dim options As New RestClientOptions(baseUrl) With {.UseDefaultCredentials = True}
			Dim client = New RestClient(options)
			'  Crear una RestRequest para el método GET
			Dim request = New RestRequest()
			'  Ejecutar la solicitud y obtener la respuesta
			Dim response = client.Get(request)
			'  Comprobar si la solicitud se ha realizado correctamente
			If response.IsSuccessful Then
				'  Deserializar la respuesta JSON en una lista de objetos Usuario
				Dim users = JsonSerializer.Deserialize(Of List(Of User))(response.Content)
				'  Generar Pdf
				Dim html = GetHtml(users)
				Dim Renderer = New ChromePdfRenderer()
				Dim PDF = Renderer.RenderHtmlAsPdf(html)
				PDF.SaveAs("UsersReport.pdf")
			Else
				'  Gestionar el error
				Console.WriteLine($"Error: {response.ErrorMessage}")
			End If
		End Sub
'INSTANT VB WARNING: Nullable reference types have no equivalent in VB:
'ORIGINAL LINE: private static string GetHtml(List<User>? users)
		Private Shared Function GetHtml(ByVal users As List(Of User)) As String
			Dim header As String = $"
<html>
<head><title>Users List</title></head>
<body>
    "
	ignore ignore ignore ignore var footer = "
</body>
</html>"
	ignore ignore var htmlContent = header
			For Each user In users
				htmlContent += $"
    <h1>{user.Name}</h1>
    <p>Username: {user.Username}</p>
    <p>Email: {user.Email}</p>
    <p>Company: {user.Company}</p>
    <p>Phone: {user.Phone}</p>
    <p>Website: {user.Website}</p>
    <p>Suite: {user.Address.Suite}</p>
    <p>Street: {user.Address.Street}</p>
    <p>City: {user.Address.City}</p>
    <p>Zipcode: {user.Address.Zipcode}</p>
"
	ignore ignore ignore ignore ignore ignore ignore ignore ignore ignore ignore
			Next user
			htmlContent += footer
			Return htmlContent
		End Function
	End Class
End Namespace
VB   C#

El código completo se encuentra en Git aquí.

Aquí estamos generando primero una cadena HTML a partir de la lista de usuarios con todo el formato requerido para los informes. A continuación, utilizamos IronPDF para generar un documento PDF. Utilizamos el método "RenderHtmlAsPdf" para convertir una cadena HTML en un documento PDF. El documento generado es el siguiente:

RestSharp C# (Cómo funciona para desarrolladores): Figura 4 - Salida PDF

El documento tiene una pequeña marca de agua para las licencias de prueba y puede eliminarse con una licencia válida.

Licencias (prueba gratuita disponible)

Para que el código anterior funcione, se necesita una clave de licencia. Esta clave debe colocarse en appsettings.json

"IronPdf.LicenseKey": "your license key"
"IronPdf.LicenseKey": "your license key"
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'"IronPdf.LicenseKey": "your license key"
VB   C#

Los desarrolladores disponen de una licencia de prueba para registrarse. aquí y sí, no se requiere tarjeta de crédito para una licencia de prueba. Uno puede proporcionar el ID de correo electrónico y registrarse para una prueba gratuita.

Conclusión

La biblioteca RestSharp simplifica el proceso de trabajar con API RESTful en C#, proporcionando una forma limpia y eficiente de realizar peticiones HTTP y gestionar las respuestas. Tanto si recupera datos con solicitudes GET como si los envía con solicitudes POST, la intuitiva API de RestSharp y sus prácticas funciones la convierten en una valiosa herramienta para los desarrolladores que crean aplicaciones que interactúan con servicios web.

IronPDF ofrece una solución flexible y fácil de usar para generar archivos PDF. Para obtener más información sobre las distintas funciones de IronPDF, visite la documentación página.

perpetua de IronPDF licencia que le ayudará a mejorar sus habilidades de codificación y a cumplir los requisitos de las aplicaciones modernas.

Conocer tanto RestSharp como IronPDF aporta grandes habilidades y los desarrolladores pueden crear aplicaciones modernas.

< ANTERIOR
Cómo combinar archivos PDF en .NET
SIGUIENTE >
Test Console Application C# (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,974,197 Ver licencias >
123