USO DE IRONQR

Cómo generar códigos QR en ASP .NET Core

Jordi Bardia
Jordi Bardia
6 de junio, 2024
Compartir:

Introducción

Los códigos QR se han convertido en parte integrante de la tecnología moderna y ofrecen una forma cómoda de almacenar y transmitir información. En el desarrollo web, los generadores de códigos QR como el que implementaremos usando IronQR en ASP.NET Core, proporcionan capacidades robustas para la creación dinámica de códigos QR. Los generadores de códigos QR tienen un valor incalculable para diversas aplicaciones, como sistemas de venta de entradas, autenticación, gestión de inventarios, etc. Este artículo profundiza en el proceso de creación de códigos QR en ASP.NET Core utilizando IronQR, una potente librería diseñada para este fin. ASP.NET Core, al ser un marco versátil para crear aplicaciones web, ofrece sólidas capacidades para generar códigos QR. En este artículo, profundizaremos en el proceso de creación de códigos QR en ASP.NET Core usando IronQR, una potente biblioteca para la generación de códigos QR de Iron Software.

Cómo generar códigos QR en ASP.NET Core

  1. Crear un proyecto ASP.Net con Visual Studio

  2. Instale la biblioteca IronQR desde el Administrador de Paquetes

  3. Generar código QR

  4. Generar código QR con formato

Entender IronQR

IronQR es una biblioteca de alta rendimiento para la generación de códigos QR en aplicaciones .NET. Proporciona una API sencilla e intuitiva para generar códigos QR con varias opciones de personalización. IronQR admite .NET Standard, por lo que es compatible con una amplia gama de plataformas, incluida ASP.NET Core. Con IronQR, los desarrolladores pueden generar sin esfuerzo códigos QR con diferentes tipos de datos, niveles de corrección de errores, tamaños y formatos.

Características principales

1. Lectura y creación de códigos QR

IronQR le permite generar y leer códigos QR con facilidad. Tanto si necesita crear códigos QR dinámicamente como extraer información de los ya existentes, esta biblioteca le cubre todas sus necesidades.

2. API fácil de usar

La biblioteca proporciona una API fácil de usar que permite a los desarrolladores integrar rápidamente la funcionalidad de los códigos de barras en sus proyectos .NET. Puede empezar a trabajar con códigos QR en sólo unos minutos.

3. Compatibilidad

IronQR es compatible con varias versiones de .NET, incluyendo:

  1. C#, VB.NET, F#

  2. .NET Core (8, 7, 6, 5 y 3.1+)

  3. .NET Standard (2.0+)

  4. .NET Framework (4.6.2+)

    Cubre una amplia gama de tipos de proyectos, incluidos web (Blazor y WebForms), móviles (Xamarin y MAUI), aplicaciones de escritorio (WPF y MAUI) y de consola.

4. Modelo de aprendizaje automático para la detección de QR

IronQR utiliza un avanzado modelo de aprendizaje automático personalizado para detectar códigos QR. Esto garantiza un reconocimiento preciso y fiable de los códigos. Además, hay una opción de Modo Slim (sin ML) disponible para aquellos que prefieren un enfoque ligero.

5. Lectura de códigos QR

Puede leer códigos QR de varios formatos de imagen, incluidos:

  1. Imágenes (jpg, png, svg, bmp)

  2. Imágenes multipágina (gif, tif, tiff)

  3. System.Drawing Bitmaps

  4. Imágenes de IronDrawing (AnyBitmap)

6. Escribir códigos QR

IronQR le permite escribir códigos QR para diferentes tipos de documentos, tales como:

  1. Imágenes (jpg, png, gif, tiff, bmp)

  2. Imágenes de System.Drawing

  3. Flujos (MemoryStream, byte[])

  4. PDF (Estampar en PDF Existente)

7. Estilización de códigos QR

Personaliza los códigos QR cambiando el tamaño, ajustando márgenes y bordes, cambiando el color y añadiendo logotipos.

8. Tratamiento y corrección de errores

IronQR proporciona mensajes de error detallados y admite niveles de corrección de errores personalizados para QR.

Con estos conocimientos, vamos a empezar con la aplicación para generar código QR en ASP.NET Core.

Paso 1: Crear un nuevo proyecto ASP.NET con Visual Studio

Antes de sumergirnos en la generación de códigos QR, vamos a configurar un nuevo proyecto ASP.NET Core. Estos son los pasos para iniciar un nuevo proyecto:

Empiece creando un nuevo proyecto en Visual Studio y seleccionando la plantilla de aplicación ASP.Net Core Web App

Cómo generar códigos QR en ASP .NET Core: Figura 1 - Seleccione la plantilla de aplicación web ASP.NET CORE

Nombre y ubicación del proyecto

Cómo generar códigos QR en ASP .NET Core: Figura 2 - Nombre el proyecto y la ubicación donde desea guardarlo

Seleccione la versión .NET necesaria.

¡Cómo generar códigos QR en ASP .NET Core: Figura 3 - Seleccione la versión correcta de .NET.

Haga clic en el botón "crear" para generar el código de la aplicación a partir de la plantilla

Cómo generar códigos QR en ASP .NET Core: Figura 4 - Haz clic en el botón crear para generar el código del template

Paso 2: Instalar la librería IronQR desde el Gestor de Paquetes

Instale la biblioteca IronQR desde el Administrador de Paquetes de Visual Studio como se muestra a continuación.

Cómo generar códigos QR en ASP .NET Core: Figura 5 - Busque IronOCR usando Visual Studio Package Manager e instálelo

IronQR también se puede instalar utilizando NuGet Package Manager.

Cómo Generar Códigos QR en ASP .NET Core: Figura 6 - Buscar IronOCR usando NuGet Package Manager

Paso 3: Generar un código QR

Ahora, vamos a crear una aplicación de código QR.

Crear QRCode Modelo

using System.ComponentModel.DataAnnotations;
namespace GenerateQRCode.Models
{
    public class QRCodeModel
    {
        [Display(Name = "Enter QR Code Text")]
        public string QRCodeText
        {
            get;
            set;
        }
    }
}
using System.ComponentModel.DataAnnotations;
namespace GenerateQRCode.Models
{
    public class QRCodeModel
    {
        [Display(Name = "Enter QR Code Text")]
        public string QRCodeText
        {
            get;
            set;
        }
    }
}
Imports System.ComponentModel.DataAnnotations
Namespace GenerateQRCode.Models
	Public Class QRCodeModel
		<Display(Name := "Enter QR Code Text")>
		Public Property QRCodeText() As String
	End Class
End Namespace
$vbLabelText   $csharpLabel

Crear un controlador de código QR

Para añadir un nuevo controlador, haga clic con el botón derecho del ratón en la carpeta del controlador e introduzca un nombre como se muestra a continuación.

Cómo generar códigos QR en ASP .NET Core: Figura 7 - Añadir un nuevo controlador haciendo clic en la carpeta y asignarle un nombre

Seleccione el controlador vacío.

Cómo generar códigos QR en ASP .NET Core: Figura 8 - Haga clic en Controlador vacío en el aviso

Proporcione un nombre.

Cómo generar códigos QR en ASP .NET Core: Figura 9 - Nombrar el controlador

A continuación, integra el siguiente código en el controlador.

using GenerateQRCode.Models;
using IronQr;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;
namespace GenerateQRCode.Controllers
{
    public class QrCodeController : Controller
    {
        private readonly IWebHostEnvironment _environment;
        public QrCodeController(IWebHostEnvironment environment)
        {
            _environment = environment;
        }
        public IActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public IActionResult CreateQRCode(QRCodeModel generateQRCode)
        {
            try
            {
                string path = Path.Combine(_environment.WebRootPath, "GeneratedQRCode");
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                string filePath = Path.Combine(_environment.WebRootPath, "GeneratedQRCode/qrcode.png");
                // Create a QR Code object
                QrCode myQr = QrWriter.Write(generateQRCode.QRCodeText);
                // Save QR Code as a Bitmap
                AnyBitmap qrImage = myQr.Save();
                // Save QR Code Bitmap as File
                qrImage.SaveAs(filePath);
                string fileName = Path.GetFileName(filePath); // qr code file
                string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/GeneratedQRCode/" + fileName;
                ViewBag.QrCodeUri = imageUrl;
            }
            catch (Exception)
            {
                throw;
            }
            return View();
        }
    }
}
using GenerateQRCode.Models;
using IronQr;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;
namespace GenerateQRCode.Controllers
{
    public class QrCodeController : Controller
    {
        private readonly IWebHostEnvironment _environment;
        public QrCodeController(IWebHostEnvironment environment)
        {
            _environment = environment;
        }
        public IActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public IActionResult CreateQRCode(QRCodeModel generateQRCode)
        {
            try
            {
                string path = Path.Combine(_environment.WebRootPath, "GeneratedQRCode");
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                string filePath = Path.Combine(_environment.WebRootPath, "GeneratedQRCode/qrcode.png");
                // Create a QR Code object
                QrCode myQr = QrWriter.Write(generateQRCode.QRCodeText);
                // Save QR Code as a Bitmap
                AnyBitmap qrImage = myQr.Save();
                // Save QR Code Bitmap as File
                qrImage.SaveAs(filePath);
                string fileName = Path.GetFileName(filePath); // qr code file
                string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/GeneratedQRCode/" + fileName;
                ViewBag.QrCodeUri = imageUrl;
            }
            catch (Exception)
            {
                throw;
            }
            return View();
        }
    }
}
Imports GenerateQRCode.Models
Imports IronQr
Imports IronSoftware.Drawing
Imports Microsoft.AspNetCore.Mvc
Namespace GenerateQRCode.Controllers
	Public Class QrCodeController
		Inherits Controller

		Private ReadOnly _environment As IWebHostEnvironment
		Public Sub New(ByVal environment As IWebHostEnvironment)
			_environment = environment
		End Sub
		Public Function Index() As IActionResult
			Return View()
		End Function
		<HttpPost>
		Public Function CreateQRCode(ByVal generateQRCode As QRCodeModel) As IActionResult
			Try
				Dim path As String = System.IO.Path.Combine(_environment.WebRootPath, "GeneratedQRCode")
				If Not Directory.Exists(path) Then
					Directory.CreateDirectory(path)
				End If
				Dim filePath As String = System.IO.Path.Combine(_environment.WebRootPath, "GeneratedQRCode/qrcode.png")
				' Create a QR Code object
				Dim myQr As QrCode = QrWriter.Write(generateQRCode.QRCodeText)
				' Save QR Code as a Bitmap
				Dim qrImage As AnyBitmap = myQr.Save()
				' Save QR Code Bitmap as File
				qrImage.SaveAs(filePath)
				Dim fileName As String = System.IO.Path.GetFileName(filePath) ' qr code file
				Dim imageUrl As String = $"{Me.Request.Scheme}://{Me.Request.Host}{Me.Request.PathBase}" & "/GeneratedQRCode/" & fileName
				ViewBag.QrCodeUri = imageUrl
			Catch e1 As Exception
				Throw
			End Try
			Return View()
		End Function
	End Class
End Namespace
$vbLabelText   $csharpLabel

Código Explicación

Definición de espacios de nombres y clases

El código comienza con sentencias using, que importan los espacios de nombres necesarios. El espacio de nombres GenerateQRCode.Controllers contiene la clase QrCodeController.

Controlador Constructor

La clase QrCodeController tiene un constructor que toma un parámetro IWebHostEnvironment. Este parámetro es inyectado por ASP.NET Core para gestionar tareas relacionadas con el alojamiento web.

Métodos de acción

Index(): Este método devuelve una vista (presumiblemente una página HTML) cuando se accede. No parece estar directamente relacionado con la generación de códigos QR. CreateQRCode(QRCodeModel generateQRCode): Este método es el núcleo de la lógica de generación de códigos QR. Recibe un objeto QRCodeModel (presumiblemente que contiene el texto del código QR) como parámetro.

Dentro del método

Construye una ruta para guardar la imagen del código QR generado. Crea un objeto de código QR usando QrWriter.Write(generateQRCode.QRCodeText). Guarda el código QR como una imagen de mapa de bits. Construye una URL de imagen basada en los detalles de la petición web. Establece la propiedad ViewBag.QrCodeUri con la URL de la imagen. Si se produce alguna excepción durante este proceso, se lanza.

Generación de códigos QR

La generación real del código QR ocurre dentro del método CreateQRCode. La llamada QrWriter.Write(generateQRCode.QRCodeText) crea un objeto de código QR basado en el texto proporcionado.

Ahorro de imágenes

El código QR generado se guarda como una imagen de mapa de bits usando qrImage.SaveAs(filePath). La ruta del archivo de imagen se construye a partir de la ruta raíz de la web y el nombre de archivo deseado.

URL de la imagen

El imageUrl se construye utilizando el esquema, el host y la base de la ruta de la solicitud web. Esta URL apunta a la ubicación en la que se puede acceder a la imagen del código QR generado. En general, este controlador se encarga de generar el código QR, guardar la imagen y proporcionar una URL de la imagen para su uso posterior

Añadir vista al controlador

Para agregar una nueva vista, haz clic derecho en el método de acción CreateQRCode en la clase QrCodeController.

Cómo generar códigos QR en ASP .NET Core: Figura 10 - Agregar una nueva vista en la clase `QrCodeController`

Seleccione "Añadir vista" y, a continuación, "Vista Razor". Haga clic en el botón "Añadir".

Cómo generar códigos QR en ASP .NET Core: Figura 11 - Seleccione la opción Agregar vista, luego Razor View, luego Agregar

A continuación, seleccione la plantilla "Crear" y la clase Modelo generada anteriormente.

Cómo generar códigos QR en ASP .NET Core: Figura 12 - Seleccione la plantilla `Create` generada previamente

Ahora reemplaza el siguiente código en la vista

@model GenerateQRCode.Models.QRCodeModel
@{
    ViewData["Title"] = "Generate QR Code";
}
<h1>Generate QR Code</h1>
<h4>QRCodeModel</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="CreateQRCode">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="QRCodeText" class="control-label"></label>
                <span asp-validation-for="QRCodeText" class="text-danger"></span>
            </div>
            <div class="form-group">
            </div>
            <div class="form-group">
                <img src="@ViewBag.QrCodeUri" class="img-thumbnail" />
            </div>
        </form>
    </div>
</div>
<div>
    <a asp-action="Index">Clear</a>
</div>
@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
@model GenerateQRCode.Models.QRCodeModel
@{
    ViewData["Title"] = "Generate QR Code";
}
<h1>Generate QR Code</h1>
<h4>QRCodeModel</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="CreateQRCode">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="QRCodeText" class="control-label"></label>
                <span asp-validation-for="QRCodeText" class="text-danger"></span>
            </div>
            <div class="form-group">
            </div>
            <div class="form-group">
                <img src="@ViewBag.QrCodeUri" class="img-thumbnail" />
            </div>
        </form>
    </div>
</div>
<div>
    <a asp-action="Index">Clear</a>
</div>
@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
model ReadOnly Property () As GenerateQRCode.Models.QRCodeModel
	ViewData("Title") = "Generate QR Code"
End Property
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <h1> Generate QR Code</h1> <h4> QRCodeModel</h4> <hr /> <div class="row"> <div class="col-md-4"> <form asp-action="CreateQRCode"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="QRCodeText" class="control-label"></label> <span asp-validation-for="QRCodeText" class="text-danger"></span> </div> <div class="form-group"> </div> <div class="form-group"> <img src="@ViewBag.QrCodeUri" class="img-thumbnail" /> </div> </form> </div> </div> <div> <a asp-action="Index"> Clear</a> </div> @section Scripts
"img-thumbnail" /> </div> </form> </div> </div> (Of div) <a asp-action="Index"> Clear</a> </div> section Scripts
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Friend <h1> Generate QR Code</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-4"> <form asp-action="CreateQRCode"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="QRCodeText" class="control-label"></label> <span asp-validation-for="QRCodeText" class="text-danger"></span> </div> <div class="form-group"> </div> <div class="form-group"> <img src="@ViewBag.QrCodeUri" class="img-thumbnail" /> </div> </form> </div> </div> <div> <a asp-action
"@ViewBag.QrCodeUri" class="img-thumbnail" /> </div> </form> </div> </div> (Of div) <a asp-action
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Friend <h1> Generate QR Code</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-4"> <form asp-action="CreateQRCode"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="QRCodeText" class="control-label"></label> <span asp-validation-for="QRCodeText" class="text-danger"></span> </div> <div class="form-group"> </div> <div class="form-group"> <img src="@ViewBag.QrCodeUri" class
"form-group"> <img src="@ViewBag.QrCodeUri" class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Friend <h1> Generate QR Code</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-4"> <form asp-action="CreateQRCode"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="QRCodeText" class="control-label"></label> <span asp-validation-for="QRCodeText" class="text-danger"></span> </div> <div class="form-group"> </div> <div class="form-group"> <img src
"form-group"> </div> <div class="form-group"> <img src
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Friend <h1> Generate QR Code</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-4"> <form asp-action="CreateQRCode"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="QRCodeText" class="control-label"></label> <span asp-validation-for="QRCodeText" class="text-danger"></span> </div> <div class="form-group"> </div> <div class
"text-danger"></span> </div> <div class="form-group"> </div> <div class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Friend <h1> Generate QR Code</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-4"> <form asp-action="CreateQRCode"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="QRCodeText" class="control-label"></label> <span asp-validation-for="QRCodeText" class="text-danger"></span> </div> <div class
"QRCodeText" class="text-danger"></span> </div> <div class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Private Friend <h1> Generate QR Code</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-4"> <form asp-action="CreateQRCode"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="QRCodeText" class="control-label"></label> <span asp-validation-for="QRCodeText" class
"control-label"></label> <span asp-validation-for="QRCodeText" class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Private Private Friend <h1> Generate QR Code</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-4"> <form asp-action="CreateQRCode"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="QRCodeText" class="control-label"></label> <span asp-validation-for
"QRCodeText" class="control-label"></label> <span asp-validation-for
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Private Private Private Friend <h1> Generate QR Code</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-4"> <form asp-action="CreateQRCode"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="QRCodeText" class
"form-group"> <label asp-for="QRCodeText" class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Private Private Private Private Friend <h1> Generate QR Code</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-4"> <form asp-action="CreateQRCode"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for
"text-danger"></div> <div class="form-group"> <label asp-for
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Private Private Private Private Private Friend <h1> Generate QR Code</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-4"> <form asp-action="CreateQRCode"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class
"ModelOnly" class="text-danger"></div> <div class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Private Private Private Private Private Private Friend <h1> Generate QR Code</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-4"> <form asp-action="CreateQRCode"> <div asp-validation-summary="ModelOnly" class
"CreateQRCode"> <div asp-validation-summary="ModelOnly" class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Private Private Private Private Private Private Private Friend <h1> Generate QR Code</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-4"> <form asp-action="CreateQRCode"> <div asp-validation-summary
"col-md-4"> <form asp-action="CreateQRCode"> <div asp-validation-summary
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Private Private Private Private Private Private Private Private Friend <h1> Generate QR Code</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-4"> <form asp-action
"row"> <div class="col-md-4"> <form asp-action
'INSTANT VB WARNING: Instant VB cannot determine whether both operands of this division are integer types - if they are then you should use the VB integer division operator:
Private Private Private Private Private Private Private Private Private Private Private Private Private Private Friend (Of h1) Generate QR Code</h1> (Of h4) QRCodeModel</h4> <hr /> <div Class="row"> <div class
	@
	If True Then
		Await Html.RenderPartialAsync("_ValidationScriptsPartial")
	End If
End Class
$vbLabelText   $csharpLabel

Haga lo mismo para el método de acción de índice también, de modo que cuando se inicia la aplicación, no va a lanzar un error para la solicitud POST.

Ahora en el program.cs cambia el siguiente código para hacer la vista anterior como ruta por defecto.

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=QrCode}/{action=Index}"
);
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=QrCode}/{action=Index}"
);
app.MapControllerRoute(name:= "default", pattern:= "{controller=QrCode}/{action=Index}")
$vbLabelText   $csharpLabel

Esta acción modificará la ruta predeterminada de HomeController a nuestro controlador QrCode.

Ahora, compila y ejecuta el proyecto.

Cómo generar códigos QR en ASP .NET Core: Figura 13 - Página de inicio de ejemplo del proyecto

Introduzca cualquier texto en el cuadro de texto y haga clic en "Crear". Esto creará un nuevo código QR como se muestra a continuación.

Cómo generar códigos QR en ASP .NET Core: Figura 14 - Ingrese cualquier texto y haga clic en crear para crear un nuevo código QR utilizando IronOCR

Añadir estilo al código QR

Las QrStyleOptions se utilizan para dar estilo a la generación de códigos QR.

[HttpPost]
public IActionResult CreateQRCode(QRCodeModel generateQRCode)
{
    try
    {
        string path = Path.Combine(_environment.WebRootPath, "GeneratedQRCode");
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
        string filePath = Path.Combine(_environment.WebRootPath, "GeneratedQRCode/qrcode.png");
        // Create a QR Code obj
        QrCode qrCode = QrWriter.Write(generateQRCode.QRCodeText);
        QrStyleOptions style = new QrStyleOptions
        {
            Dimensions = 300, // px
            Margins = 10, // px
            Color = Color.YellowGreen
        };
        // Save QR Code as a any bitmap
        AnyBitmap qrImage = qrCode.Save(style);
        // Save QR Code Bitmap to File
        qrImage.SaveAs(filePath);
        string fileName = Path.GetFileName(filePath); // qr code file
        string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/GeneratedQRCode/" + fileName;
        ViewBag.QrCodeUri = imageUrl;
    }
    catch (Exception)
    {
        throw;
    }
    return View();
}
[HttpPost]
public IActionResult CreateQRCode(QRCodeModel generateQRCode)
{
    try
    {
        string path = Path.Combine(_environment.WebRootPath, "GeneratedQRCode");
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
        string filePath = Path.Combine(_environment.WebRootPath, "GeneratedQRCode/qrcode.png");
        // Create a QR Code obj
        QrCode qrCode = QrWriter.Write(generateQRCode.QRCodeText);
        QrStyleOptions style = new QrStyleOptions
        {
            Dimensions = 300, // px
            Margins = 10, // px
            Color = Color.YellowGreen
        };
        // Save QR Code as a any bitmap
        AnyBitmap qrImage = qrCode.Save(style);
        // Save QR Code Bitmap to File
        qrImage.SaveAs(filePath);
        string fileName = Path.GetFileName(filePath); // qr code file
        string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/GeneratedQRCode/" + fileName;
        ViewBag.QrCodeUri = imageUrl;
    }
    catch (Exception)
    {
        throw;
    }
    return View();
}
<HttpPost>
Public Function CreateQRCode(ByVal generateQRCode As QRCodeModel) As IActionResult
	Try
		Dim path As String = System.IO.Path.Combine(_environment.WebRootPath, "GeneratedQRCode")
		If Not Directory.Exists(path) Then
			Directory.CreateDirectory(path)
		End If
		Dim filePath As String = System.IO.Path.Combine(_environment.WebRootPath, "GeneratedQRCode/qrcode.png")
		' Create a QR Code obj
		Dim qrCode As QrCode = QrWriter.Write(generateQRCode.QRCodeText)
		Dim style As New QrStyleOptions With {
			.Dimensions = 300,
			.Margins = 10,
			.Color = Color.YellowGreen
		}
		' Save QR Code as a any bitmap
		Dim qrImage As AnyBitmap = qrCode.Save(style)
		' Save QR Code Bitmap to File
		qrImage.SaveAs(filePath)
		Dim fileName As String = System.IO.Path.GetFileName(filePath) ' qr code file
		Dim imageUrl As String = $"{Me.Request.Scheme}://{Me.Request.Host}{Me.Request.PathBase}" & "/GeneratedQRCode/" & fileName
		ViewBag.QrCodeUri = imageUrl
	Catch e1 As Exception
		Throw
	End Try
	Return View()
End Function
$vbLabelText   $csharpLabel

Salida

Cómo generar códigos QR en ASP .NET Core: Figura 15 - Modificar el color del código QR programáticamente

Licencia (prueba disponible)

Para los desarrolladores que deseen probar IronQR, una licencia de prueba está disponible aquí. Esta clave de licencia debe colocarse en el archivo appSettings.json. Al hacerlo, se eliminará la marca de agua que aparece en las imágenes anteriores. Esto eliminará la marca de agua que aparece en las imágenes anteriores.

{
"IronQR.License.LicenseKey" : "My key"
}

Conclusión

En este artículo, hemos explorado cómo generar códigos QR en ASP.NET Core utilizando IronQR. Aprovechando la potencia de IronQR, los desarrolladores pueden integrar fácilmente la funcionalidad de generación de códigos QR en sus aplicaciones web. Ya sea para la emisión de billetes, la autenticación o el intercambio de información, los códigos QR ofrecen una solución versátil para transmitir datos de forma eficaz. Con IronQR, crear y personalizar códigos QR en ASP.NET Core nunca ha sido tan fácil. Comience a incorporar la generación de códigos QR en sus proyectos ASP.NET Core y desbloquee un mundo de posibilidades para codificar y compartir datos de forma dinámica.

Jordi Bardia
Ingeniero de software
Jordi es más competente en Python, C# y C++, cuando no está aprovechando sus habilidades en Iron Software; está programando juegos. Compartiendo responsabilidades en las pruebas de productos, el desarrollo de productos y la investigación, Jordi añade un inmenso valor a la mejora continua de los productos. La variada experiencia le mantiene desafiado y comprometido, y dice que es uno de sus aspectos favoritos de trabajar con Iron Software. Jordi creció en Miami, Florida, y estudió Informática y Estadística en la Universidad de Florida.
< ANTERIOR
Cómo usar .NET MAUI para escáner de código QR
SIGUIENTE >
Cómo escanear códigos QR en ASP .NET

¿Listo para empezar? Versión: 2025.4 acaba de salir

Ver licencias >