Cómo generar códigos QR en ASP.NET Core
Los códigos QR se han convertido en una parte integral de la tecnología moderna, ofreciendo una forma conveniente de almacenar y transmitir información. En el desarrollo web, generadores de códigos QR como el que implementaremos usando IronQR en ASP.NET Core, ofrecen capacidades robustas para la creación dinámica de códigos QR. Los generadores de códigos QR son invaluables para varias aplicaciones como sistemas de boletos, autenticación, gestión de inventario, y más. Este artículo profundiza en el proceso de creación de códigos QR en ASP.NET Core usando IronQR, una biblioteca poderosa diseñada para este propósito. ASP.NET Core, al ser un marco versátil para construir aplicaciones web, ofrece capacidades robustas para la generación de 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 poderosa biblioteca para la generación de códigos QR de Iron Software.
Cómo generar códigos QR en ASP.NET Core
- Crear un proyecto ASP.Net usando Visual Studio
- Instalar la biblioteca IronQR desde el Administrador de Paquetes
- Generar Código QR
- Generar Código QR con Formato
Entendiendo IronQR
IronQR es una biblioteca de generación de códigos QR de alto rendimiento para aplicaciones .NET. Proporciona una API simple e intuitiva para generar códigos QR con varias opciones de personalización. IronQR es compatible con .NET Standard, lo que lo hace compatible con una amplia gama de plataformas, incluido 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 te permite generar y leer códigos QR con facilidad. Ya sea que necesites crear códigos QR dinámicamente o extraer información de los existentes, esta biblioteca lo cubre.
2. API fácil de usar
La biblioteca proporciona una API amigable para los usuarios que permite a los desarrolladores integrar la funcionalidad de códigos de barras en sus proyectos .NET rápidamente. Puedes empezar a trabajar con códigos QR en solo unos minutos.
3. Compatibilidad
IronQR es compatible con varias versiones de .NET, incluyendo:
- C#, VB.NET, F#
- .NET Core (8, 7, 6, 5 y 3.1+)
- .NET Standard (2.0+)
- .NET Framework (4.6.2+)
Cubre una amplia gama de tipos de proyectos, incluyendo web (Blazor & WebForms), móvil (Xamarin & MAUI), de escritorio (WPF & MAUI), y aplicaciones de consola.
4. Modelo de aprendizaje automático para la detección de códigos QR
IronQR utiliza un modelo avanzado personalizado de Aprendizaje Automático para detectar códigos QR. Esto asegura un reconocimiento preciso y confiable de los códigos. Además, hay una opción de Modo Slim (no-ML) disponible para aquellos que prefieren un enfoque liviano.
5. Lectura de códigos QR
Puedes leer códigos QR de varios formatos de imagen, incluyendo:
- Imágenes (jpg, png, svg, bmp)
- Imágenes Multipágina (gif, tif, tiff)
System.DrawingMapas de bits- Imágenes de IronDrawing (
AnyBitmap)
6. Escritura de códigos QR
IronQR te permite escribir códigos QR para diferentes tipos de documentos, tales como:
- Imágenes (jpg, png, gif, tiff, bmp)
System.DrawingImágenes- Streams (
MemoryStream,byte[]) - PDF (Estampar en PDF Existente)
7. Estilo de códigos QR
Personaliza los códigos QR redimensionándolos, ajustando márgenes y bordes, recoloreándolos, añadiendo logotipos
8. Manejo y corrección de errores
IronQR proporciona mensajes detallados de error y soporta niveles personalizados de corrección de errores QR.
Con este conocimiento, comencemos con la aplicación para generar el código QR en ASP.NET Core.
Paso 1: Cree un nuevo proyecto ASP.NET con Visual Studio
Antes de profundizar en la generación de códigos QR, configuremos un nuevo proyecto ASP.NET Core. Aquí están los pasos para iniciar un nuevo proyecto:
Empieza creando un nuevo proyecto en Visual Studio y seleccionando la aplicación de plantilla ASP.Net Core Web App

Proporciona Nombre del Proyecto y ubicación

Seleccione la versión .NET requerida.

Haz clic en el botón "crear" para generar el código de la aplicación desde la plantilla

Paso 2: Instalar la biblioteca IronQR desde el Administrador de paquetes
Instala la biblioteca IronQR desde el Administrador de Paquetes de Visual Studio como se muestra a continuación.

IronQR también se puede instalar usando el Administrador de Paquetes NuGet.

Paso 3: Generar un código QR
Ahora, crearemos 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
Crear un controlador de código QR
Para agregar un nuevo controlador, haz clic derecho sobre la carpeta del controlador y proporciona un nombre como se muestra a continuación.

Selecciona el Controlador Vacío.

Proporciona un nombre.

A continuación, integra el siguiente código en el controlador.
using GenerateQRCode.Models;
using IronSoftware.Drawing;
using IronQr;
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 IronSoftware.Drawing;
using IronQr;
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 IronSoftware.Drawing
Imports IronQr
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
Explicación del código
Definición de espacio de nombres y clase
El código comienza con declaraciones de uso, que importan los espacios de nombres necesarios. El espacio de nombres GenerateQRCode.Controllers contiene la clase QrCodeController.
Constructor del controlador
La clase QrCodeController tiene un constructor que toma un parámetro IWebHostEnvironment. Este parámetro es inyectado por ASP.NET Core para manejar 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 a él. 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 objetoQRCodeModel(que presumiblemente contiene el texto del código QR) como parámetro.
Dentro del método
- Construye una ruta para guardar la imagen generada del código QR.
- Crea un objeto de código QR utilizando
QrWriter.Write(generateQRCode.QRCodeText). - Guarda el código QR como una imagen bitmap.
- Construye un URL de la imagen basado en los detalles de la solicitud web.
- Establece la propiedad
ViewBag.QrCodeUricon la URL de la imagen. - Si ocurre alguna excepción durante este proceso, son lanzadas.
Generación de códigos QR
La generación del código QR propiamente dicha tiene lugar dentro del método CreateQRCode. La llamada QrWriter.Write(generateQRCode.QRCodeText) crea un objeto de código QR basado en el texto proporcionado.
Guardar imagen
El código QR generado se guarda como una imagen de mapa de bits utilizando qrImage.SaveAs(filePath). La ruta del archivo de imagen se construye basándose en la ruta raíz 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. Este URL apunta a la ubicación donde la imagen generada del código QR puede ser accedida. En general, este controlador maneja la generación de códigos QR, guarda la imagen y proporciona un URL de imagen para uso posterior.
Agregar vista al controlador
Para añadir una nueva vista, haz clic con el botón derecho del ratón en el método de acción CreateQRCode de la clase QrCodeController.

Selecciona "Agregar Vista" luego selecciona "Razor View". Haz clic en el botón "Añadir".

Luego selecciona la plantilla "Create" y la clase del Modelo generada previamente.

Ahora reemplaza el código a continuación 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>
<input asp-for="QRCodeText" class="form-control" />
<span asp-validation-for="QRCodeText" class="text-danger"></span>
</div>
<div class="form-group">
<a href="#" class="btn btn-primary">Create QR Code</a>
</div>
<div class="form-group">
<img src="@ViewBag.QrCodeUri" class="img-thumbnail" alt="Your QR Code will appear here." />
</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>
<input asp-for="QRCodeText" class="form-control" />
<span asp-validation-for="QRCodeText" class="text-danger"></span>
</div>
<div class="form-group">
<a href="#" class="btn btn-primary">Create QR Code</a>
</div>
<div class="form-group">
<img src="@ViewBag.QrCodeUri" class="img-thumbnail" alt="Your QR Code will appear here." />
</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> <input asp-for="QRCodeText" class="form-control" /> <span asp-validation-for="QRCodeText" class="text-danger"></span> </div> <div class="form-group"> <a href="#" class="btn btn-primary"> Create QR Code</a> </div> <div class="form-group"> <img src="@ViewBag.QrCodeUri" class="img-thumbnail" alt="Your QR Code will appear here." /> </div> </form> </div> </div> <div> <a asp-action="Index"> Clear</a> </div> @section Scripts
"Your QR Code will appear here." /> </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> <input asp-for="QRCodeText" class="form-control" /> <span asp-validation-for="QRCodeText" class="text-danger"></span> </div> <div class="form-group"> <a href="#" class="btn btn-primary"> Create QR Code</a> </div> <div class="form-group"> <img src="@ViewBag.QrCodeUri" class="img-thumbnail" alt="Your QR Code will appear here." /> </div> </form> </div> </div> <div> <a asp-action
"img-thumbnail" alt="Your QR Code will appear here." /> </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> <input asp-for="QRCodeText" class="form-control" /> <span asp-validation-for="QRCodeText" class="text-danger"></span> </div> <div class="form-group"> <a href="#" class="btn btn-primary"> Create QR Code</a> </div> <div class="form-group"> <img src="@ViewBag.QrCodeUri" class="img-thumbnail" alt
"@ViewBag.QrCodeUri" class="img-thumbnail" alt
'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> <input asp-for="QRCodeText" class="form-control" /> <span asp-validation-for="QRCodeText" class="text-danger"></span> </div> <div class="form-group"> <a href="#" class="btn btn-primary"> Create QR Code</a> </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 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> <input asp-for="QRCodeText" class="form-control" /> <span asp-validation-for="QRCodeText" class="text-danger"></span> </div> <div class="form-group"> <a href="#" class="btn btn-primary"> Create QR Code</a> </div> <div class="form-group"> <img src
"btn btn-primary"> Create QR Code</a> </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 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> <input asp-for="QRCodeText" class="form-control" /> <span asp-validation-for="QRCodeText" class="text-danger"></span> </div> <div class="form-group"> <a href="#" class="btn btn-primary"> Create QR Code</a> </div> <div class
"#" class="btn btn-primary"> Create QR Code</a> </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> <input asp-for="QRCodeText" class="form-control" /> <span asp-validation-for="QRCodeText" class="text-danger"></span> </div> <div class="form-group"> <a href="#" class
"form-group"> <a href="#" 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> <input asp-for="QRCodeText" class="form-control" /> <span asp-validation-for="QRCodeText" class="text-danger"></span> </div> <div class="form-group"> <a href
"text-danger"></span> </div> <div class="form-group"> <a href
'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="control-label"></label> <input asp-for="QRCodeText" class="form-control" /> <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 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> <input asp-for="QRCodeText" class="form-control" /> <span asp-validation-for="QRCodeText" class
"form-control" /> <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 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> <input asp-for="QRCodeText" class="form-control" /> <span asp-validation-for
"QRCodeText" class="form-control" /> <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 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> <input asp-for="QRCodeText" class
"control-label"></label> <input 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 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> <input asp-for
"QRCodeText" class="control-label"></label> <input 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 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 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 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 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 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 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 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
Haz lo mismo para el método de acción de índice también, de modo que cuando se inicie la aplicación, no arroje un error para la solicitud POST.
Ahora, en el Program.cs, cambia el siguiente código para que la vista anterior sea la ruta predeterminada.
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}")
Esta acción modificará la ruta predeterminada de HomeController a nuestra QrCodeController.
Ahora, compile y ejecute el proyecto.

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

Agregar estilo al código QR
QrStyleOptions se utiliza para dar estilo a la generación del código 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 object
QrCode qrCode = QrWriter.Write(generateQRCode.QRCodeText);
QrStyleOptions style = new QrStyleOptions
{
Dimensions = 300, // px size
Margins = 10, // px margins
Color = Color.YellowGreen // custom color
};
// Save QR Code with style options as a 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 object
QrCode qrCode = QrWriter.Write(generateQRCode.QRCodeText);
QrStyleOptions style = new QrStyleOptions
{
Dimensions = 300, // px size
Margins = 10, // px margins
Color = Color.YellowGreen // custom color
};
// Save QR Code with style options as a 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 object
Dim qrCode As QrCode = QrWriter.Write(generateQRCode.QRCodeText)
Dim style As New QrStyleOptions With {
.Dimensions = 300,
.Margins = 10,
.Color = Color.YellowGreen
}
' Save QR Code with style options as a 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
Resultado

Licencia (versión de prueba disponible)
Para los desarrolladores que quieren 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 se muestra 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 usando IronQR. Aprovechando el poder de IronQR, los desarrolladores pueden integrar fácilmente la funcionalidad de generación de códigos QR en sus aplicaciones web. Ya sea para boletos, autenticación o para compartir información, los códigos QR ofrecen una solución versátil para transmitir datos de manera eficiente. 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 la codificación dinámica de datos y el intercambio.
Preguntas Frecuentes
¿Cómo puedo generar códigos QR en ASP.NET Core?
Para generar códigos QR en ASP.NET Core, puede usar la biblioteca IronQR. Comience creando un nuevo proyecto ASP.NET en Visual Studio, instale IronQR a través del Administrador de Paquetes e implemente el código para generar códigos QR usando su API fácil de usar.
¿Qué opciones de personalización están disponibles para los códigos QR en ASP.NET Core?
IronQR ofrece varias opciones de personalización para los códigos QR en ASP.NET Core, incluyendo redimensionar, ajustar márgenes, cambiar colores y agregar logotipos. Estas se pueden gestionar utilizando la clase QrStyleOptions.
¿Cómo funciona la corrección de errores en la generación de códigos QR con ASP.NET Core?
IronQR le permite gestionar los niveles de corrección de errores al generar códigos QR en ASP.NET Core. Esto asegura que los códigos QR tengan el nivel deseado de resistencia al error, lo cual es esencial para un escaneo confiable.
¿Puedo leer códigos QR de diferentes formatos de imagen en ASP.NET Core?
Sí, con IronQR en ASP.NET Core, puede leer códigos QR de varios formatos de imagen como jpg, png, svg, bmp, gif, tif y tiff, así como Bitmaps de System.Drawing e Imágenes de IronDrawing (AnyBitmap).
¿Es posible probar IronQR sin una licencia completa?
Sí, puede obtener una licencia de prueba de IronQR en el sitio web de Iron Software. La prueba le permite probar la biblioteca y eliminar marcas de agua de los códigos QR generados durante la fase de prueba colocando la licencia en el archivo appSettings.json.
¿Cuáles son los beneficios de usar códigos QR en aplicaciones web?
Los códigos QR son beneficiosos para aplicaciones web, ya que permiten un almacenamiento y transmisión de datos eficientes. Son especialmente útiles en aplicaciones como sistemas de boletos, autenticación y gestión de inventarios, proporcionando una forma dinámica de codificar y compartir información.
¿Cómo mejora el aprendizaje automático la detección de códigos QR en ASP.NET Core?
IronQR utiliza un modelo avanzado personalizado de aprendizaje automático para la detección de códigos QR, asegurando alta precisión y fiabilidad en el reconocimiento de códigos. Para los usuarios que prefieren una solución más ligera, también está disponible un Modo Slim sin aprendizaje automático.



