IRONSOFTWAREHOME
USO DE IRONBARCODE

Escáner de código de barras ASP.NET : Carga de archivos y API REST con IronBarcode

Curtis Chau
Curtis Chau
Updated: 20 de junio de 2026

El escaneo de códigos de barras en ASP.NET se vuelve sencillo con IronBarcode: instalar a través de NuGet, llamar a BarcodeReader.Read(), y obtener valores decodificados con tipo, confianza y datos de posición en un solo paso, sin necesidad de configuraciones complejas.

El escaneo de códigos de barras es un requisito estándar en las aplicaciones web modernas, que potencia la gestión de inventario, el procesamiento de documentos y los flujos de trabajo de validación de tickets. Según GS1 , los códigos de barras se utilizan en más de 6 mil millones de transacciones diarias en todo el mundo, una cifra que subraya lo importante que es la lectura precisa de códigos de barras para cualquier sistema comercial. El estándar ISO/IEC 15415 define métricas de calidad para símbolos de códigos de barras 2D, mientras que el estándar ISO/IEC 15416 cubre códigos de barras lineales 1D, ambos compatibles de forma nativa con IronBarcode .

Esta guía le muestra cómo agregar un escaneo de código de barras confiable a su aplicación ASP.NET Core usando IronBarcode, cubriendo la instalación, el procesamiento de carga de archivos, la integración de API REST y los patrones de implementación de producción. Al final, tendrás un código funcional tanto para un escáner de carga de archivos de páginas Razor como para un punto final de API JSON que acepta imágenes codificadas en base64 desde cualquier cliente.

¿Cómo instalar IronBarcode en un proyecto ASP.NET ?

Comenzar sólo lleva unos minutos. La biblioteca es compatible con aplicaciones ASP.NET Core y ASP.NET MVC tradicionales, lo que la hace adaptable a diversos tipos de proyectos. Las implementaciones empresariales funcionan igual de bien en Azure , AWS Lambda y contenedores Docker . La detección basada en aprendizaje automático de la biblioteca maneja imágenes de códigos de barras complejas aplicando automáticamente una corrección de imagen sofisticada, lo que resulta particularmente útil al procesar fotos tomadas con cámaras móviles en condiciones de iluminación variables.

Instalación mediante el gestor de paquetes NuGet

Abra la consola del gestor de paquetes en Visual Studio y ejecute:

PM > Install-Package BarCode

Alternativamente, utilice la CLI de .NET :

dotnet add package BarCode

O busque "BarCode" en la interfaz de usuario del Administrador de paquetes NuGet de Visual Studio y haga clic en Instalar. El paquete gestiona automáticamente todas las dependencias.

Para implementaciones específicas de la plataforma, considere usar paquetes NuGet específicos de la plataforma que estén optimizados para su entorno de destino. La biblioteca ofrece paquetes estándar y BarCode.Slim para adaptarse a diferentes escenarios de implementación. Para obtener la guía de instalación completa, consulte la guía de instalación de IronBarcode .

Configurando su proyecto

Una vez instalado, agregue la declaración using necesaria a sus archivos C#:

using IronBarCode;

Esta importación le brinda acceso a las capacidades completas de lectura y generación de códigos de barras de IronBarcode. La biblioteca admite más de 30 formatos de códigos de barras, incluyendo QR Code, Code 128, Code 39, Data Matrix y PDF417. Consulte la lista completa de formatos de códigos de barras compatibles para confirmar la compatibilidad con su caso de uso.

Para solucionar problemas de instalación, consulte la guía de solución de problemas de paquetes NuGet o envíe una solicitud de ingeniería para obtener soporte especializado.

Cómo elegir el patrón de arquitectura adecuado

Al implementar el escaneo de códigos de barras en ASP.NET, existen dos enfoques arquitectónicos principales. Comprender estos patrones le ayudará a elegir la configuración adecuada del lector de código de barras para cada caso de uso:

// Server-side processing -- recommended for most ASP.NET scenarios
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    UseConfidenceThreshold = true,
    ConfidenceThreshold = 0.85
};

var results = BarcodeReader.Read(stream, options);

foreach (var barcode in results)
{
    Console.WriteLine($"Type: {barcode.BarcodeType}, Value: {barcode.Text}");
}

El enfoque del lado del servidor le brinda el máximo control sobre el procesamiento de imágenes y funciona de manera consistente en todos los navegadores. Cuando el servidor procesa cada imagen, también obtiene un registro de auditoría limpio: cada código de barras escaneado pasa a través de su capa de aplicación, donde puede registrarlo, validarlo contra una base de datos o activar flujos de trabajo posteriores. Este patrón es particularmente adecuado para industrias reguladas como la atención médica, la logística y la fabricación, donde cada escaneo debe registrarse.

Para la integración de capturas de cámara del lado del cliente, los navegadores modernos soportan la API MediaDevices para acceso a la cámara, que se puede combinar con el procesamiento del lado del servidor de IronBarcode a través de una API REST, cubierto en detalle más adelante en esta guía. Elegir el procesamiento del lado del servidor también simplifica su modelo de seguridad: no hay lógica de procesamiento sensible expuesta al navegador, y toda la validación ocurre detrás del límite de su aplicación.

Ventajas y desventajas del escaneo de códigos de barras del lado del cliente frente al del lado del servidor
AspectoCaptura del lado del cliente + procesamiento del servidorProcesamiento puro del lado del servidor
Best paraEscaneo en tiempo real con cámaraProcesamiento por lotes, carga de archivos
Compatibilidad con navegadoresSólo navegadores modernosTodos los navegadores
Experiencia de usuarioRetroalimentación instantáneaFlujo de carga estándar
Modelo de seguridadMás complejo (CORS, autenticación)Directo
Uso del ancho de bandaInferior (preprocesado en el dispositivo)Superior (carga de imagen sin procesar)

¿Cómo se implementa el escaneo de códigos de barras al cargar archivos?

El escaneo de carga de archivos es el escenario de código de barras más común en las aplicaciones web ASP.NET . Este patrón funciona para procesar facturas, etiquetas de envío o cualquier documento con códigos de barras incrustados. Para mejorar el rendimiento, considere implementar la lectura de códigos de barras asincrónica para manejar múltiples cargas simultáneamente.

Creación del formulario de carga

Cree un formulario HTML adaptable en su vista ASP.NET :

@* Razor view -- barcode upload form *@
<form method="post" enctype="multipart/form-data" id="barcodeForm">
    <div class="form-group">
        <label for="barcodeFile">Select Barcode Image:</label>
        <input type="file" name="barcodeFile" id="barcodeFile"
               accept="image/*,.pdf" class="form-control"
               capture="environment" />
    </div>
    <button type="submit" class="btn btn-primary" id="scanBtn">
        <span class="spinner-border spinner-border-sm d-none" role="status"></span>
        Scan Barcode
    </button>
</form>
<div id="results">
    @ViewBag.BarcodeResult
</div>

El atributo capture="environment" activa la cámara trasera en dispositivos móviles, brindando a los usuarios una experiencia similar a una cámara nativa sin JavaScript.

Implementación de procesamiento backend seguro

La acción del controlador maneja la validación de archivos, el procesamiento del flujo de memoria y el formato de resultados:

[HttpPost]
[ValidateAntiForgeryToken]
[RequestSizeLimit(10_000_000)] // 10MB limit
public async Task<IActionResult> ScanBarcode(IFormFile barcodeFile)
{
    var allowedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif",
                                    ".tiff", ".bmp", ".pdf" };
    var extension = Path.GetExtension(barcodeFile.FileName).ToLowerInvariant();

    if (!allowedExtensions.Contains(extension))
    {
        ModelState.AddModelError("", "Invalid file type");
        return View();
    }

    if (barcodeFile != null && barcodeFile.Length > 0)
    {
        using var stream = new MemoryStream();
        await barcodeFile.CopyToAsync(stream);
        stream.Position = 0;

        var options = new BarcodeReaderOptions
        {
            Speed = ReadingSpeed.Balanced,
            ExpectMultipleBarcodes = true,
            ExpectBarcodeTypes = BarcodeEncoding.AllOneDimensional |
                                BarcodeEncoding.QRCode |
                                BarcodeEncoding.DataMatrix,
            ImageFilters = new ImageFilterCollection
            {
                new SharpenFilter(),
                new ContrastFilter()
            }
        };

        var results = BarcodeReader.Read(stream, options);

        ViewBag.BarcodeResult = results.Any()
            ? string.Join("<br/>", results.Select(r => $"<strong>{r.BarcodeType}:</strong> {r.Text}"))
            : "No barcodes found in the image.";
    }

    return View();
}

Esta implementación valida el tipo de archivo antes de procesarlo, lee códigos de barras de un flujo de memoria y devuelve todos los resultados detectados. IronBarcode procesa varios formatos de imagen , incluidos documentos TIFF, GIF y PDF de varias páginas, eliminando el código de manejo específico del formato.

Cómo se ven la entrada y la salida escaneadas

La URL de codificación de código de barras Code 128 'https://ironsoftware.com/csharp/barcode/' muestra barras legibles por máquina con texto legible por humanos debajo para escaneo preciso en aplicaciones de lector de códigos de barras ASP.NET

El ejemplo anterior muestra un código de barras Código 128 estándar, un formato común en aplicaciones de envío e inventario. Después del escaneo, la pantalla de resultados confirma el valor decodificado junto con los metadatos de confianza:

Interfaz de aplicación web ASP.NET Core mostrando resultados de escaneo de código de barras exitosos con formulario de carga de archivos mostrando valor de código de barras decodificado Code128 y metadatos de puntuación de confianza

IronBarcode devuelve el tipo de código de barras, el valor decodificado, la puntuación de confianza y los datos de posición de cada código de barras detectado en la imagen cargada.

¿Cómo se crea una API REST para el escaneo de códigos de barras?

Las aplicaciones ASP.NET modernas a menudo exponen capacidades de escaneo de códigos de barras a través de API REST, lo que permite la integración con aplicaciones móviles, aplicaciones de una sola página o servicios de terceros. Este patrón admite la captura de cámara del lado del cliente con procesamiento del lado del servidor.

Consideraciones de seguridad para las API de códigos de barras

Antes de escribir el controlador, planifique la capa de seguridad. Los datos del código de barras pueden contener contenido arbitrario, por lo que siempre debe validar las entradas. Siga las pautas de seguridad de IronBarcode para una protección completa:

  • Validación de entrada : desinfecte el contenido del código de barras antes de almacenarlo o actuar sobre él
  • Limitación de velocidad : utilice el middleware de limitación de velocidad integrado de ASP.NET Core para evitar el abuso de la API
  • Autenticación : puntos finales seguros con tokens JWT o claves API
  • Aplicación de HTTPS : todo el tráfico de la API de código de barras debe viajar a través de TLS
  • Política CORS : restrinja qué orígenes pueden llamar a su punto final de escaneo
  • Gestión de claves de licencia : aplique las claves de licencia correctamente y configúrelas en web.config para producción

Construyendo el controlador de API de producción

[ApiController]
[Route("api/[controller]")]
public class BarcodeController : ControllerBase
{
    private readonly ILogger<BarcodeController> _logger;
    private readonly IMemoryCache _cache;

    public BarcodeController(ILogger<BarcodeController> logger, IMemoryCache cache)
    {
        _logger = logger;
        _cache = cache;
    }

    [HttpPost("scan")]
    [ProducesResponseType(typeof(BarcodeResponse), 200)]
    [ProducesResponseType(typeof(ErrorResponse), 400)]
    public async Task<IActionResult> ScanBarcode([FromBody] BarcodeRequest request)
    {
        try
        {
            if (string.IsNullOrEmpty(request.ImageBase64))
                return BadRequest(new ErrorResponse { Error = "Image data is required" });

            var cacheKey = $"barcode_{request.ImageBase64.GetHashCode()}";
            if (_cache.TryGetValue(cacheKey, out BarcodeResponse cachedResult))
                return Ok(cachedResult);

            byte[] imageBytes = Convert.FromBase64String(request.ImageBase64);

            if (imageBytes.Length > 10 * 1024 * 1024)
                return BadRequest(new ErrorResponse { Error = "Image size exceeds 10MB limit" });

            var options = new BarcodeReaderOptions
            {
                Speed = ReadingSpeed.Faster,
                ExpectMultipleBarcodes = request.ExpectMultiple ?? false,
                UseConfidenceThreshold = true,
                ConfidenceThreshold = 0.8
            };

            var results = await Task.Run(() => BarcodeReader.Read(imageBytes, options));

            var response = new BarcodeResponse
            {
                Success = true,
                Barcodes = results.Select(r => new BarcodeData
                {
                    Type = r.BarcodeType.ToString(),
                    Value = r.Text,
                    Confidence = r.Confidence,
                    Position = new BarcodePosition
                    {
                        X = r.Points.Select(p => p.X).Min(),
                        Y = r.Points.Select(p => p.Y).Min(),
                        Width = r.Width,
                        Height = r.Height
                    }
                }).ToList()
            };

            _cache.Set(cacheKey, response, TimeSpan.FromMinutes(5));
            return Ok(response);
        }
        catch (FormatException)
        {
            return BadRequest(new ErrorResponse { Error = "Invalid base64 image data" });
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Error processing barcode scan");
            return StatusCode(500, new ErrorResponse { Error = "Internal server error" });
        }
    }
}

public record BarcodeRequest(string ImageBase64, bool? ExpectMultiple);

public record BarcodeResponse
{
    public bool Success { get; init; }
    public List<BarcodeData> Barcodes { get; init; } = new();
}

public record BarcodeData
{
    public string Type { get; init; }
    public string Value { get; init; }
    public double Confidence { get; init; }
    public BarcodePosition Position { get; init; }
}

public record BarcodePosition(int X, int Y, int Width, int Height);

public record ErrorResponse
{
    public bool Success => false;
    public string Error { get; init; }
}

Este punto final acepta imágenes codificadas en base64, el formato estándar para transmitir imágenes por HTTP. La respuesta incluye el tipo de código de barras, el valor decodificado, el nivel de confianza y la posición. Para escenarios de gran volumen, revise las opciones de optimización de la velocidad de lectura y procesamiento de códigos de barras por lotes .

¿Cómo gestiona la API múltiples códigos de barras?

Tres formatos de código de barras diferentes etiquetados A B C demostrando simbologías de Código QR, Code128 y DataMatrix que IronBarcode procesa simultáneamente en entornos de producción

IronBarcode procesa múltiples códigos de barras en una sola imagen en una sola llamada y devuelve una matriz de resultados. Cada entrada en la respuesta incluye datos de posición para que la aplicación cliente pueda resaltar los códigos de barras detectados en la pantalla.

Pestaña de red de herramientas de desarrollo del navegador mostrando respuesta exitosa de API JSON que contiene un array de tres códigos de barras detectados con metadatos completos incluyendo tipo, valor, confianza y coordenadas de posición

La respuesta JSON estructurada proporciona a las aplicaciones cliente todo lo que necesitan para procesar y mostrar resultados de códigos de barras sin búsquedas adicionales.

¿Cómo manejar imágenes de códigos de barras desafiantes?

El escaneo de códigos de barras en el mundo real frecuentemente involucra imágenes imperfectas: fotos tomadas en ángulos, con poca iluminación o códigos de barras parcialmente dañados. IronBarcode aborda estos escenarios a través de sus capacidades avanzadas de procesamiento de imágenes y umbrales de confianza de aprendizaje automático .

Diagnóstico de problemas comunes de escaneo

Antes de aplicar correcciones, identifique en qué categoría se encuentra su problema. La mayoría de las fallas de escaneo en producción se dividen en cinco grupos: problemas de calidad de imagen (borrosidad, ruido, baja resolución), problemas geométricos (rotación, inclinación, distorsión de la perspectiva), problemas de daños (etiquetas rotas, tinta manchada), problemas ambientales (resplandor, sombras, iluminación inconsistente) y detección de falsos positivos donde el lector encuentra un código de barras que no existe.

Conocer la categoría le ayudará a seleccionar la combinación de filtros y la velocidad de lectura adecuadas sin ejecutar un procesamiento innecesario en cada imagen. Para la mayoría de los escenarios de aplicaciones web, comenzar con ReadingSpeed.Balanced y AutoRotate = true cubre la mayoría de los casos. Solo escalar a ExtremeDetail cuando la primera pasada no devuelve resultados.

El enfoque de múltiples pasadas en el código siguiente implementa esta estrategia escalonada. El primer paso rápido maneja imágenes típicas rápidamente, manteniendo la latencia media baja para el caso común. El segundo pase detallado solo se activa cuando falla el primer pase, lo que garantiza que usted pague el costo de procesamiento adicional solo cuando realmente sea necesario. Este patrón mantiene su punto final ASP.NET receptivo bajo carga normal y al mismo tiempo maneja casos extremos difíciles de manera confiable.

Problemaas comunes de escaneo de códigos de barras y soluciones
ProblemaSíntomaSolución
Imagen borrosaPuntuaciones de confianza bajas, lecturas fallidasAplicar SharpenFilter , aumentar la velocidad ExtremeDetail
Código de barras rotadoCódigo de barras no detectado en absolutoHabilitar AutoRotate = true
Código de barras dañadoLecturas parciales, valores incorrectosHabilitar la corrección de errores, utilizar RemoveFalsePositive
Contraste pobreDetección inconsistenteAplicar ContrastFilter y BrightnessFilter
El rendimiento es demasiado lentoAlta latencia en las cargasUtilice ReadingSpeed.Faster y habilite el multihilo

Implementación del procesamiento de imágenes de múltiples pasadas

Para imágenes desafiantes, un enfoque de procesamiento por niveles produce los mejores resultados sin sacrificar el rendimiento en imágenes fáciles:

public class AdvancedBarcodeProcessor
{
    private readonly ILogger<AdvancedBarcodeProcessor> _logger;

    public async Task<List<ScannedBarcode>> ProcessChallengingImage(Stream imageStream)
    {
        // First pass -- fast, minimal processing
        var fastOptions = new BarcodeReaderOptions
        {
            Speed = ReadingSpeed.Balanced,
            ExpectMultipleBarcodes = true,
            AutoRotate = false,
            UseConfidenceThreshold = true,
            ConfidenceThreshold = 0.85
        };

        var results = BarcodeReader.Read(imageStream, fastOptions);

        if (!results.Any())
        {
            // Second pass -- aggressive image correction
            imageStream.Position = 0;

            var detailedOptions = new BarcodeReaderOptions
            {
                Speed = ReadingSpeed.ExtremeDetail,
                ExpectMultipleBarcodes = true,
                AutoRotate = true,
                RemoveFalsePositive = true,
                UseConfidenceThreshold = true,
                ConfidenceThreshold = 0.6,
                Multithreaded = true,
                ExpectBarcodeTypes = BarcodeEncoding.All,
                ImageFilters = new ImageFilterCollection
                {
                    new SharpenFilter(2.5f),
                    new ContrastFilter(2.0f),
                    new BrightnessFilter(1.2f),
                    new InvertFilter()
                }
            };

            results = BarcodeReader.Read(imageStream, detailedOptions);
            _logger.LogInformation("Second pass detected {Count} barcodes", results.Count());
        }

        return results.Select(r => new ScannedBarcode
        {
            Value = r.Text,
            BarcodeType = r.BarcodeType.ToString(),
            Confidence = r.Confidence,
            RotationAngle = r.RotationAngle,
            PageNumber = r.PageNumber
        }).ToList();
    }
}

public record ScannedBarcode
{
    public string Value { get; init; }
    public string BarcodeType { get; init; }
    public double Confidence { get; init; }
    public float RotationAngle { get; init; }
    public int PageNumber { get; init; }
}

La clase BarcodeReaderOptions proporciona un control detallado sobre cada aspecto del escaneo. Configurando AutoRotate se manejan imágenes capturadas en cualquier ángulo, mientras que los filtros de imagen mejoran la claridad para códigos de barras borrosos o con bajo contraste. Para obtener una configuración detallada, consulte el ejemplo de configuración del lector de código de barras y la configuración del lector específico de PDF .

Al trabajar con archivos PDF, considere estampar códigos de barras en ellos o crear códigos de barras como documentos PDF . Para el procesamiento de gran volumen, habilitar subprocesos múltiples a través de las capacidades asíncronas y multiproceso mejora significativamente el rendimiento.

Adición de compatibilidad del navegador y estrategias de respaldo

La compatibilidad con diversos navegadores requiere una mejora progresiva. Los navegadores modernos en Android y Chrome de escritorio, Edge y Firefox soportan la API MediaDevices.getUserMedia() para acceso a la cámara. Safari en iOS lo admite desde la versión 11 en adelante. Es posible que los navegadores empresariales más antiguos, los modos de compatibilidad con IE11 y ciertos entornos corporativos bloqueados no admitan el acceso a la cámara, por lo que su ruta de carga de archivos alternativa siempre debe permanecer funcional.

El enfoque recomendado es utilizar la detección de características en tiempo de ejecución en lugar de rastrear el agente de usuario y luego mostrar u ocultar la interfaz de la cámara según corresponda. Comience con una interfaz compatible con cámara y luego vuelva con elegancia a la carga de archivos:

@* Razor view with progressive enhancement *@
<div class="barcode-scanner-container">
    @* Camera capture -- hidden until JavaScript confirms support *@
    <div id="cameraSection" class="d-none">
        <video id="videoPreview" class="w-100" autoplay></video>
        <button id="captureBtn" class="btn btn-primary mt-2">Capture and Scan</button>
    </div>

    @* File upload -- always available as fallback *@
    <div id="uploadSection">
        <form method="post" enctype="multipart/form-data"
              asp-action="ScanBarcode" asp-controller="Barcode">
            <div class="form-group">
                <label>Upload Barcode Image:</label>
                <input type="file" name="file" accept="image/*,.pdf"
                       class="form-control" required />
            </div>
            <button type="submit" class="btn btn-primary">Upload and Scan</button>
        </form>
    </div>
</div>

La integración de Blazor proporciona soporte para aplicaciones web modernas con una configuración mínima si prefiere un enfoque basado en componentes. Para solucionar problemas de implementación, consulte la guía de excepciones de copia de tiempos de ejecución .

¿Cuales son tus próximos pasos?

El escaneo de códigos de barras en ASP.NET es sencillo con IronBarcode. Instalas un paquete NuGet, llamas a BarcodeReader.Read(), y obtienes resultados decodificados fiables en más de 30 formatos, incluyendo imágenes del mundo real desafiantes con las que otras bibliotecas tienen dificultades.

Para seguir construyendo sobre esta base, explore estos recursos:

Comience con una licencia de prueba gratuita para probar IronBarcode en su aplicación ASP.NET sin restricciones. La prueba incluye acceso completo a todas las funciones, incluidas la detección de múltiples formatos, la corrección de imágenes y los patrones de API REST que se muestran en esta guía, para que pueda evaluar el rendimiento de sus propias imágenes antes de comprometerse con una licencia de producción. Para las aplicaciones móviles .NET MAUI que necesitan escaneo en el dispositivo, consulte el tutorial del escáner de código de barras .NET MAUI que extiende la misma API a los destinos iOS y Android.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta