Lecteur de code-barres ASP.NET Core

This article was translated from English: Does it need improvement?
Translated
View the article in English

Introduction

ASP.NET Core est un framework multiplateforme pour créer des applications web modernes. Son modèle Razor Pages propose une approche basée sur les pages pour gérer les requêtes HTTP, ce qui le rend bien adapté au traitement des codes-barres côté serveur. Avec IronBarcode, les images téléchargées peuvent être reçues sous forme d'objets IFormFile, converties en tableaux d'octets et transmises directement au lecteur de BarCode sans écriture de fichiers temporaires sur le disque.

Cet article explique comment intégrer IronBarcode dans une application ASP.NET Core Razor Pages pour scanner des codes-barres et des QR codes à partir d'images téléchargées, ainsi que pour générer des codes-barres depuis le serveur.

IronBarcode : Bibliothèque de codes-barres C

IronBarcode offre une API robuste pour lire et écrire des codes-barres dans les applications .NET. La bibliothèque gère le traitement d'images en interne, ce qui permet aux développeurs de transmettre des octets bruts, des chemins d'accès aux fichiers ou des flux directement à la méthode BarcodeReader.Read sans avoir besoin de bibliothèques de traitement d'images distinctes. Elle prend en charge une large gamme de formats de code-barres, y compris le QR Code, le Code 128, le Code 39, le PDF417, l'EAN, et bien d'autres.

Pour les applications web, IronBarcode est particulièrement utile car il traite les images entièrement en mémoire. Les fichiers téléchargés n'ont jamais besoin d'être enregistrés sur le disque, ce qui simplifie le déploiement et réduit les charges de nettoyage. Cette même bibliothèque génère également des BARCODES avec BarcodeWriter.CreateBarcode, ce qui en fait une dépendance unique pour la lecture et l'écriture.

Étapes pour construire un lecteur de code-barres dans ASP.NET Core

Suivez ces étapes pour créer un lecteur de code-barres basé sur le web en utilisant ASP.NET Core Razor Pages et IronBarcode.

Prérequis

  1. Visual Studio 2022 ou plus récent (ou tout IDE avec support .NET)
  2. SDK .NET 6.0 ou plus récent

Créer le projet

Créez un nouveau projet ASP.NET Core Web App (Razor Pages). Cela peut être fait via l'assistant de projet de Visual Studio ou depuis la ligne de commande :

dotnet new webapp -n BarcodeWebApp
dotnet new webapp -n BarcodeWebApp
SHELL

Installer la bibliothèque IronBarcode

Installez la bibliothèque IronBarcode en utilisant la console du Package Manager NuGet. Accédez à Tools > NuGet Package Manager > Package Manager Console dans Visual Studio et exécutez :

Install-Package BarCode

Vous pouvez également l'installer à partir de la ligne de commande avec dotnet add package BarCode. La dernière version est disponible sur le site de NuGet.

Frontend

Le frontend se compose d'un formulaire de téléchargement de fichiers et d'une zone d'affichage des résultats. Le formulaire utilise enctype="multipart/form-data" pour gérer les téléchargements de fichiers binaires. Lorsqu'un code-barres est détecté, le résultat apparaît dans une alerte de succès sous l'image téléchargée.

Remplacez le contenu du fichier Index.cshtml par ce qui suit :

@page
@model IndexModel
@{
    ViewData["Title"] = "Barcode Scanner";
}

<div class="container mt-4">
    <h1 class="mb-4">Barcode Scanner</h1>

    <div class="card mb-4">
        <div class="card-header"><h5>Upload & Read Barcode</h5></div>
        <div class="card-body">
            <form method="post" asp-page-handler="Upload" enctype="multipart/form-data">
                <div class="mb-3">
                    <label for="file" class="form-label">Select a barcode image:</label>
                    <input type="file" class="form-control" id="file"
                           name="UploadedFile" accept="image/*" />
                </div>
                <button type="submit" class="btn btn-primary">Scan Barcode</button>
            </form>

            @if (Model.ImageDataUrl != null)
            {
                <div class="mt-3">
                    <h6>Uploaded Image:</h6>
                    <img src="@Model.ImageDataUrl" alt="Uploaded barcode"
                         style="max-width: 300px;" class="img-thumbnail" />
                </div>
            }

            @if (Model.BarcodeResult != null)
            {
                <div class="alert alert-success mt-3">
                    <strong>Barcode Value:</strong> @Model.BarcodeResult
                </div>
            }

            @if (Model.ErrorMessage != null)
            {
                <div class="alert alert-warning mt-3">@Model.ErrorMessage</div>
            }
        </div>
    </div>
</div>
@page
@model IndexModel
@{
    ViewData["Title"] = "Barcode Scanner";
}

<div class="container mt-4">
    <h1 class="mb-4">Barcode Scanner</h1>

    <div class="card mb-4">
        <div class="card-header"><h5>Upload & Read Barcode</h5></div>
        <div class="card-body">
            <form method="post" asp-page-handler="Upload" enctype="multipart/form-data">
                <div class="mb-3">
                    <label for="file" class="form-label">Select a barcode image:</label>
                    <input type="file" class="form-control" id="file"
                           name="UploadedFile" accept="image/*" />
                </div>
                <button type="submit" class="btn btn-primary">Scan Barcode</button>
            </form>

            @if (Model.ImageDataUrl != null)
            {
                <div class="mt-3">
                    <h6>Uploaded Image:</h6>
                    <img src="@Model.ImageDataUrl" alt="Uploaded barcode"
                         style="max-width: 300px;" class="img-thumbnail" />
                </div>
            }

            @if (Model.BarcodeResult != null)
            {
                <div class="alert alert-success mt-3">
                    <strong>Barcode Value:</strong> @Model.BarcodeResult
                </div>
            }

            @if (Model.ErrorMessage != null)
            {
                <div class="alert alert-warning mt-3">@Model.ErrorMessage</div>
            }
        </div>
    </div>
</div>
HTML

La disposition utilise les classes Bootstrap déjà incluses dans le modèle ASP.NET Core par défaut. Le formulaire est soumis au gestionnaire de page Upload, et des blocs conditionnels affichent l'aperçu de l'image téléchargée, le résultat décodé ou un message d'erreur.

Exemples de codes-barres d'entrée

Les exemples de codes-barres suivants peuvent être utilisés pour tester le scanner. Chaque image encode un format et une valeur différents :

ASP.NET Core Barcode Scanner - Sample QR Code input encoding a URL

QR Code encodant "https://ironsoftware.com"

ASP.NET Core Barcode Scanner - Sample Code 128 barcode input

Encodage de code-barres Code 128 "IronBarcode-2026"

ASP.NET Core Barcode Scanner - Sample Code 39 barcode input

Code 39 code-barres encodant "HELLO123"

Scanner des codes-barres avec IronBarcode

La logique côté serveur gère le fichier téléchargé dans la méthode OnPostUploadAsync. Le fichier IFormFile téléchargé est lu dans un tableau d'octets, qui est transmis directement à BarcodeReader.Read. Cela évite de sauvegarder des fichiers temporaires et garde le traitement entièrement en mémoire.

Remplacez le contenu dans Index.cshtml.cs par :

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using IronBarCode;

public class IndexModel : PageModel
{
    [BindProperty]
    public IFormFile? UploadedFile { get; set; }

    public string? BarcodeResult { get; set; }
    public string? ErrorMessage { get; set; }
    public string? ImageDataUrl { get; set; }

    public void OnGet()
    {
    }

    public async Task<IActionResult> OnPostUploadAsync()
    {
        if (UploadedFile == null || UploadedFile.Length == 0)
        {
            ErrorMessage = "Please select an image file.";
            return Page();
        }

        try
        {
            using var ms = new MemoryStream();
            await UploadedFile.CopyToAsync(ms);
            byte[] imageBytes = ms.ToArray();

            // Store image as base64 for preview display
            string base64 = Convert.ToBase64String(imageBytes);
            ImageDataUrl = $"data:{UploadedFile.ContentType};base64,{base64}";

            // Read barcode from uploaded image bytes
            var results = BarcodeReader.Read(imageBytes);

            if (results != null && results.Count() > 0)
            {
                BarcodeResult = string.Join("\n",
                    results.Select(r => r.Value));
            }
            else
            {
                ErrorMessage = "No barcode detected in the uploaded image.";
            }
        }
        catch (Exception ex)
        {
            ErrorMessage = $"Error processing image: {ex.Message}";
        }

        return Page();
    }
}
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using IronBarCode;

public class IndexModel : PageModel
{
    [BindProperty]
    public IFormFile? UploadedFile { get; set; }

    public string? BarcodeResult { get; set; }
    public string? ErrorMessage { get; set; }
    public string? ImageDataUrl { get; set; }

    public void OnGet()
    {
    }

    public async Task<IActionResult> OnPostUploadAsync()
    {
        if (UploadedFile == null || UploadedFile.Length == 0)
        {
            ErrorMessage = "Please select an image file.";
            return Page();
        }

        try
        {
            using var ms = new MemoryStream();
            await UploadedFile.CopyToAsync(ms);
            byte[] imageBytes = ms.ToArray();

            // Store image as base64 for preview display
            string base64 = Convert.ToBase64String(imageBytes);
            ImageDataUrl = $"data:{UploadedFile.ContentType};base64,{base64}";

            // Read barcode from uploaded image bytes
            var results = BarcodeReader.Read(imageBytes);

            if (results != null && results.Count() > 0)
            {
                BarcodeResult = string.Join("\n",
                    results.Select(r => r.Value));
            }
            else
            {
                ErrorMessage = "No barcode detected in the uploaded image.";
            }
        }
        catch (Exception ex)
        {
            ErrorMessage = $"Error processing image: {ex.Message}";
        }

        return Page();
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.AspNetCore.Mvc.RazorPages
Imports IronBarCode
Imports System.IO
Imports System.Threading.Tasks

Public Class IndexModel
    Inherits PageModel

    <BindProperty>
    Public Property UploadedFile As IFormFile

    Public Property BarcodeResult As String
    Public Property ErrorMessage As String
    Public Property ImageDataUrl As String

    Public Sub OnGet()
    End Sub

    Public Async Function OnPostUploadAsync() As Task(Of IActionResult)
        If UploadedFile Is Nothing OrElse UploadedFile.Length = 0 Then
            ErrorMessage = "Please select an image file."
            Return Page()
        End If

        Try
            Using ms As New MemoryStream()
                Await UploadedFile.CopyToAsync(ms)
                Dim imageBytes As Byte() = ms.ToArray()

                ' Store image as base64 for preview display
                Dim base64 As String = Convert.ToBase64String(imageBytes)
                ImageDataUrl = $"data:{UploadedFile.ContentType};base64,{base64}"

                ' Read barcode from uploaded image bytes
                Dim results = BarcodeReader.Read(imageBytes)

                If results IsNot Nothing AndAlso results.Count() > 0 Then
                    BarcodeResult = String.Join(vbLf, results.Select(Function(r) r.Value))
                Else
                    ErrorMessage = "No barcode detected in the uploaded image."
                End If
            End Using
        Catch ex As Exception
            ErrorMessage = $"Error processing image: {ex.Message}"
        End Try

        Return Page()
    End Function
End Class
$vbLabelText   $csharpLabel

Les étapes clés dans le code ci-dessus :

  1. Réception du téléchargement - Le IFormFile est lié via [BindProperty] et reçu dans le gestionnaire POST.
  2. Conversion en octets - Le fichier est copié dans un MemoryStream et converti en un tableau d'octets. Il s'agit de la même approche que celle utilisée dans l'exemple du scanner web, adaptée pour IFormFile d'ASP.NET Core au lieu des chaînes base64.
  3. Lire le BARCODE - BarcodeReader.Read(imageBytes) traite l'image et renvoie tous les BARCODES détectés.
  4. Afficher le résultat - Toutes les valeurs de code-barres détectées sont jointes et affichées dans l'interface utilisateur.

Le GIF suivant démontre le lecteur de code-barres en action, téléchargeant une image de code-barres et affichant le résultat décodé :

ASP.NET Core Barcode Scanner - Demonstration of uploading and reading a barcode

Lecteur de codes-barres scannant une image téléchargée dans l'application ASP.NET Core

Traitement des données d'images Base64

Pour les applications qui reçoivent des données d'image sous forme de chaînes base64 (par exemple, à partir de captures de webcam ou de canevas JavaScript), la même méthode BarcodeReader.Read fonctionne avec des tableaux d'octets décodés à partir de base64. Ce modèle est courant dans les applications monopages qui envoient des données d'image via AJAX :

public string ReadBarCode(string imageDataBase64)
{
    // Decode the base64 image data
    var splitObject = imageDataBase64.Split(',');
    byte[] imageByteData = Convert.FromBase64String(
        (splitObject.Length > 1) ? splitObject[1] : splitObject[0]);

    // Read barcode directly from byte array
    var results = BarcodeReader.Read(imageByteData);

    return $"{DateTime.Now}: Barcode is ({results.First().Value})";
}
public string ReadBarCode(string imageDataBase64)
{
    // Decode the base64 image data
    var splitObject = imageDataBase64.Split(',');
    byte[] imageByteData = Convert.FromBase64String(
        (splitObject.Length > 1) ? splitObject[1] : splitObject[0]);

    // Read barcode directly from byte array
    var results = BarcodeReader.Read(imageByteData);

    return $"{DateTime.Now}: Barcode is ({results.First().Value})";
}
Public Function ReadBarCode(imageDataBase64 As String) As String
    ' Decode the base64 image data
    Dim splitObject = imageDataBase64.Split(","c)
    Dim imageByteData As Byte() = Convert.FromBase64String(
        If(splitObject.Length > 1, splitObject(1), splitObject(0)))

    ' Read barcode directly from byte array
    Dim results = BarcodeReader.Read(imageByteData)

    Return $"{DateTime.Now}: Barcode is ({results.First().Value})"
End Function
$vbLabelText   $csharpLabel

Cette approche prend en charge à la fois les formats bruts base64 et les formats URI de données (par exemple, data:image/png;base64,...) en effectuant une segmentation au niveau de la virgule et en récupérant la charge utile base64 réelle. Pour une implémentation complète avec Blazor utilisant ce modèle, consultez le guide d'intégration Blazor.

Générer des codes-barres sur le serveur

IronBarcode peut également générer des BARCODES côté serveur. L'ajout d'un point de terminaison de génération à la même application est simple avec BarcodeWriter.CreateBarcode :

public IActionResult OnPostGenerate()
{
    var barcode = BarcodeWriter.CreateBarcode(
        "https://ironsoftware.com", BarcodeEncoding.QRCode);
    byte[] barcodeBytes = barcode.ToPngBinaryData();

    return File(barcodeBytes, "image/png", "generated-barcode.png");
}
public IActionResult OnPostGenerate()
{
    var barcode = BarcodeWriter.CreateBarcode(
        "https://ironsoftware.com", BarcodeEncoding.QRCode);
    byte[] barcodeBytes = barcode.ToPngBinaryData();

    return File(barcodeBytes, "image/png", "generated-barcode.png");
}
Public Function OnPostGenerate() As IActionResult
    Dim barcode = BarcodeWriter.CreateBarcode("https://ironsoftware.com", BarcodeEncoding.QRCode)
    Dim barcodeBytes As Byte() = barcode.ToPngBinaryData()

    Return File(barcodeBytes, "image/png", "generated-barcode.png")
End Function
$vbLabelText   $csharpLabel

Le code-barres généré est renvoyé sous forme de téléchargement de fichier. L'image suivante montre le code QR généré par le gestionnaire OnPostGenerate :

ASP.NET Core Barcode Scanner - Server-generated QR code output

QR code généré côté serveur avec BarcodeWriter.CreateBarcode

Pour plus d'options de génération de codes-barres, consultez le tutoriel de génération d'images de codes-barres et le guide de style de codes-barres.

Exécution de l'application

Exécutez le projet à partir de Visual Studio ou de la ligne de commande :

dotnet run
dotnet run
SHELL

L'application démarre sur le port spécifié dans launchSettings.json (généralement https://localhost:5001 ou similaire). Naviguez vers la page d'accueil pour voir l'interface du scanner de codes-barres.

Conclusion

Cet article a démontré comment construire un lecteur de code-barres côté serveur en utilisant ASP.NET Core Razor Pages et IronBarcode. La même approche fonctionne avec les contrôleurs MVC ASP.NET Core, les points d'extrémité de l'API Web et les applications Blazor Server en adaptant la façon dont les données d'image sont reçues. IronBarcode gère le traitement des images en interne, donc l'intégration nécessite un minimum de code quel que soit le framework web.

Pour lire des codes-barres sur d'autres plateformes .NET, consultez le tutoriel de scanner de codes-barres .NET MAUI et les guides de lecture de codes-barres. Obtenez plus de tutoriels sur IronBarcode à partir du tutoriel de lecture de codes-barres.

To get started quickly, download the complete BarcodeWebApp project and run it with dotnet run.

IronBarcode doit être licencié pour le développement et l'utilisation commerciale. Les détails sur les licences sont disponibles ici.

Questions Fréquemment Posées

Comment puis-je implémenter un scanner de codes-barres dans ASP.NET Core en utilisant Razor Pages ?

Vous pouvez utiliser IronBarcode dans votre projet ASP.NET Core Razor Pages pour implémenter un scanner de codes-barres. La bibliothèque vous permet de lire divers formats de codes-barres, tels que des QR Codes, des Code 128 et des Code 39, en téléversant des images et en les traitant avec BarcodeReader.Read.

Quels types de codes-barres peuvent être lus avec IronBarcode ?

IronBarcode prend en charge la lecture de plusieurs formats de codes-barres, y compris les QR Codes, les Code 128 et les Code 39, ce qui le rend polyvalent pour diverses applications.

Comment puis-je téléverser des images pour la lecture de codes-barres dans un projet ASP.NET Core ?

Dans un projet ASP.NET Core, vous pouvez téléverser des images en utilisant IFormFile. IronBarcode traite ces images pour lire les codes-barres qu'elles contiennent.

IronBarcode peut-il générer des codes-barres côté serveur dans ASP.NET Core ?

Oui, IronBarcode peut générer des codes-barres côté serveur dans ASP.NET Core en utilisant la méthode BarcodeWriter.CreateBarcode, vous permettant de créer et afficher dynamiquement des codes-barres.

À quoi sert la méthode BarcodeReader.Read ?

La méthode BarcodeReader.Read dans IronBarcode est utilisée pour décoder les codes-barres à partir d'images, ce qui en fait une partie essentielle de l'implémentation d'un scanner de codes-barres dans ASP.NET Core.

Est-il possible de scanner à la fois des QR Codes et des codes-barres en utilisant la même bibliothèque dans ASP.NET Core ?

Oui, IronBarcode vous permet de scanner à la fois des QR Codes et divers autres formats de codes-barres dans la même application ASP.NET Core, offrant une solution unifiée.

Quels sont les avantages d'utiliser IronBarcode pour la lecture de codes-barres en C# ?

IronBarcode offre une intégration facile, une prise en charge de plusieurs formats de codes-barres, et des capacités robustes de génération de codes-barres côté serveur, ce qui en fait un choix efficace pour la lecture de codes-barres dans des applications C#.

IronBarcode peut-il gérer à la fois les codes-barres 1D et 2D ?

IronBarcode est capable de gérer à la fois les codes-barres 1D et 2D, supportant un large éventail d'applications allant de l'étiquetage de produit simple à l'encodage de données complexes.

Existe-t-il des options de licences pour l'utilisation commerciale de IronBarcode ?

Iron Software propose diverses options de licences pour IronBarcode, y compris des licences commerciales pour des applications de niveau entreprise, garantissant la conformité avec les exigences commerciales.

IronBarcode prend-il en charge le traitement par lots de codes-barres ?

Oui, IronBarcode prend en charge le traitement par lots, permettant aux développeurs de générer ou de lire plusieurs codes-barres en une seule opération, améliorant ainsi l'efficacité pour les applications à grande échelle.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Prêt à commencer?
Nuget Téléchargements 2,240,258 | Version : 2026.5 just released
Still Scrolling Icon

Vous faites encore défiler ?

Vous voulez une preuve rapidement ? PM > Install-Package BarCode
exécuter un échantillon regarder votre chaîne devenir un code-barres.