ASP.NET Core BarCode-Scanner

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

Einführung

ASP.NET Core ist ein plattformübergreifendes Framework zum Erstellen moderner Webanwendungen. Sein Razor Pages-Modell bietet einen seitenbasierten Ansatz zur Verarbeitung von HTTP-Anfragen, was es gut für die serverseitige Barcode-Verarbeitung geeignet macht. Mit IronBarcode können hochgeladene Bilder als IFormFile-Objekte empfangen, in Byte-Arrays konvertiert und direkt an den BarCode-Leser übergeben werden, ohne dass temporäre Dateien auf die Festplatte geschrieben werden müssen.

Dieser Artikel beschreibt die Integration von IronBarcode in eine ASP.NET Core Razor Pages-Anwendung, um Barcodes und QR-Codes von hochgeladenen Bildern zu scannen und Barcodes vom Server zu generieren.

IronBarcode: C# Barcode Library

IronBarcode bietet eine robuste API zum Lesen und Schreiben von Barcodes in .NET-Anwendungen. Die Bibliothek übernimmt die Bildverarbeitung intern, sodass Entwickler Rohdaten, Dateipfade oder Streams direkt an die BarcodeReader.Read-Methode übergeben können, ohne separate Bildverarbeitungsbibliotheken zu benötigen. Es unterstützt eine Vielzahl von Barcode-Formaten, einschließlich QR Code, Code 128, Code 39, PDF417, EAN und vielen anderen.

Für Webanwendungen ist IronBarcode besonders nützlich, da es Bilder vollständig im Speicher verarbeitet. Hochgeladene Dateien müssen nie auf der Festplatte gespeichert werden, was die Bereitstellung vereinfacht und den Aufräumaufwand reduziert. Dieselbe Bibliothek generiert auch BarCodes mit BarcodeWriter.CreateBarcode, sodass sie sowohl für das Lesen als auch für das Schreiben als einzige Abhängigkeit dient.

Schritte zum Erstellen eines Barcode-Scanners in ASP.NET Core

Befolgen Sie diese Schritte, um einen webbasierten Barcode-Scanner mit ASP.NET Core Razor Pages und IronBarcode zu erstellen.

Voraussetzungen

  1. Visual Studio 2022 oder später (oder jede IDE mit .NET-Unterstützung)
  2. .NET 6.0 oder später SDK

Erstellen Sie das Projekt

Erstellen Sie ein neues ASP.NET Core Web App (Razor Pages) Projekt. Dies kann über den Projektassistenten von Visual Studio oder über die Befehlszeile geschehen:

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

IronBarcode-Bibliothek installieren

Installieren Sie die IronBarcode-Bibliothek mit der NuGet-Paket-Manager-Konsole. Navigieren Sie in Visual Studio zu Tools > NuGet Package Manager > Package Manager Console und führen Sie Folgendes aus:

Install-Package BarCode

Alternativ können Sie es über die Befehlszeile mit dotnet add package BarCode installieren. Die neueste Version ist auf der NuGet-Website verfügbar.

Frontend

Das Frontend besteht aus einem Datei-Upload-Formular und einem Ergebnis-Anzeigebereich. Das Formular verwendet enctype="multipart/form-data" zur Verarbeitung von Uploads binärer Dateien. Wenn ein Barcode erkannt wird, erscheint das Ergebnis in einem Erfolgs-Alert unter dem hochgeladenen Bild.

Ersetzen Sie den Inhalt der Index.cshtml Datei durch Folgendes:

@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

Das Layout verwendet Bootstrap-Klassen, die bereits in der standardmäßigen ASP.NET Core-Vorlage enthalten sind. Das Formular wird an den Seitenhandler Upload übermittelt, und bedingte Blöcke zeigen die Vorschau des hochgeladenen Bildes, das dekodierte Ergebnis oder eine Fehlermeldung an.

Beispiel-Input-Barcodes

Die folgenden Beispielbarcodes können verwendet werden, um den Scanner zu testen. Jedes Bild codiert ein anderes Format und einen anderen Wert:

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

QR-Code kodiert "https://ironsoftware.com"

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

Code 128 Barcode kodiert "IronBarcode-2026"

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

Code 39 Barcode kodiert "HELLO123"

Barcode-Scannen mit IronBarcode

Die serverseitige Logik verarbeitet die hochgeladene Datei in der Methode OnPostUploadAsync. Das hochgeladene IFormFile wird in ein Byte-Array eingelesen, das direkt an BarcodeReader.Read übergeben wird. Dies vermeidet das Speichern temporärer Dateien und hält die Verarbeitung vollständig im Speicher.

Ersetzen Sie den Inhalt in Index.cshtml.cs mit:

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

Die Schlüsselschritte im obigen Code:

  1. Upload empfangen – Der IFormFile wird über [BindProperty] gebunden und im POST-Handler empfangen.
  2. In Bytes konvertieren – Die Datei wird in ein MemoryStream kopiert und in ein Byte-Array konvertiert. Dies ist derselbe Ansatz wie im Web-Scanner-Beispiel, angepasst an ASP.NET Core's IFormFile anstelle von Base64-Zeichenfolgen.
  3. Barcode lesenBarcodeReader.Read(imageBytes) verarbeitet das Bild und gibt alle erkannten Barcodes zurück.
  4. Ergebnis anzeigen - Alle erkannten Barcode-Werte werden zusammengefügt und in der Benutzeroberfläche angezeigt.

Das folgende GIF zeigt den Barcode-Leser in Aktion, wie ein Barcode-Bild hochgeladen und das entschlüsselte Ergebnis angezeigt wird:

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

Barcode-Leser scannt ein hochgeladenes Bild in der ASP.NET Core-Anwendung

Verarbeitung von Base64-Bilddaten

Für Anwendungen, die Bilddaten als Base64-Zeichenfolgen empfangen (z. B. von Webcam-Aufnahmen oder JavaScript-Canvas), funktioniert dieselbe BarcodeReader.Read-Methode mit aus Base64 dekodierten Byte-Arrays. Dieses Muster ist in Single-Page-Anwendungen üblich, die Bilddaten über AJAX senden:

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

Dieser Ansatz verarbeitet sowohl rohe Base64- als auch Daten-URI-Formate (z. B. data:image/png;base64,...), indem er an der Kommastelle trennt und die eigentliche Base64-Nutzlast übernimmt. Für eine vollständige Blazor-Implementierung, die dieses Muster verwendet, siehe den Blazor-Integrationsleitfaden.

Erstellen von Barcodes auf dem Server

IronBarcode kann BarCodes auch serverseitig generieren. Das Hinzufügen eines Generierungs-Endpunkts zur gleichen Anwendung ist mit BarcodeWriter.CreateBarcode ganz einfach:

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

Der generierte Barcode wird als Dateidownload zurückgegeben. Das folgende Bild zeigt die vom OnPostGenerate-Handler erzeugte QR-Code-Ausgabe:

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

QR-Code serverseitig mit BarcodeWriter.CreateBarcode generiert

Weitere Optionen zur Barcode-Erstellung finden Sie im Barcode-Bilderzeugungs-Tutorial und im Barcode-Styling-Leitfaden.

Ausführung der Anwendung

Führen Sie das Projekt von Visual Studio oder der Befehlszeile aus:

dotnet run
dotnet run
SHELL

Die Anwendung startet auf dem in launchSettings.json angegebenen Port (in der Regel https://localhost:5001 oder ähnlich). Navigieren Sie zur Startseite, um die Barcode-Scanner-Schnittstelle zu sehen.

Abschluss

Dieser Artikel zeigte, wie man einen serverseitigen Barcode-Scanner mit ASP.NET Core Razor Pages und IronBarcode erstellt. Der gleiche Ansatz funktioniert mit ASP.NET Core MVC-Controllern, Web-API-Endpunkten und Blazor-Serveranwendungen, indem angepasst wird, wie die Bilddaten empfangen werden. IronBarcode verarbeitet die Bildverarbeitung intern, sodass die Integration unabhängig von der Webplattform minimalen Code erfordert.

Zum Lesen von Barcodes auf anderen .NET-Plattformen siehe das .NET MAUI Barcode-Scanner-Tutorial und die Barcode-Lesetipps. Mehr Tutorials zu IronBarcode finden Sie im Barcode-Lese-Tutorial.

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

IronBarcode muss für die Entwicklung und kommerzielle Nutzung lizenziert sein. Lizenzdetails sind hier verfügbar.

Häufig gestellte Fragen

Wie kann ich einen Barcode-Scanner in ASP.NET Core mit Razor Pages umsetzen?

Sie können IronBarcode in Ihr ASP.NET Core Razor Pages-Projekt integrieren, um einen Barcode-Scanner zu implementieren. Die Bibliothek ermöglicht es Ihnen, verschiedene Barcode-Formate wie QR-Codes, Code 128 und Code 39 durch Hochladen und Verarbeiten von Bildern mit BarcodeReader.Read zu lesen.

Welche Arten von Barcodes können mit IronBarcode gelesen werden?

IronBarcode unterstützt das Lesen mehrerer Barcode-Formate, darunter QR-Codes, Code 128 und Code 39, was es vielseitig für verschiedene Anwendungen macht.

Wie lade ich Bilder für das Barcode-Scanning in einem ASP.NET Core-Projekt hoch?

In einem ASP.NET Core-Projekt können Sie Bilder mit IFormFile hochladen. IronBarcode verarbeitet diese Bilder, um die darin enthaltenen Barcodes zu lesen.

Kann IronBarcode Barcodes serverseitig in ASP.NET Core erzeugen?

Ja, IronBarcode kann Barcodes serverseitig in ASP.NET Core mit der BarcodeWriter.CreateBarcode-Methode erzeugen, sodass Sie Barcodes dynamisch erstellen und anzeigen können.

Wofür wird die BarcodeReader.Read-Methode verwendet?

Die BarcodeReader.Read-Methode in IronBarcode wird verwendet, um Barcodes aus Bildern zu dekodieren, was sie zu einem wichtigen Bestandteil der Implementierung eines Barcode-Scanners in ASP.NET Core macht.

Ist es möglich, sowohl QR-Codes als auch Barcodes mit derselben Bibliothek in ASP.NET Core zu scannen?

Ja, IronBarcode ermöglicht es Ihnen, sowohl QR-Codes als auch verschiedene andere Barcode-Formate innerhalb derselben ASP.NET Core-Anwendung zu scannen, was eine einheitliche Lösung bietet.

Welche Vorteile bietet die Verwendung von IronBarcode für das Barcode-Scanning in C#?

IronBarcode bietet eine einfache Integration, unterstützt mehrere Barcode-Formate und bietet robuste serverseitige Barcode-Erzeugungsfähigkeiten, was es zu einer effizienten Wahl für das Barcode-Scanning in C#-Anwendungen macht.

Kann IronBarcode sowohl 1D- als auch 2D-Barcodes verarbeiten?

IronBarcode ist in der Lage, sowohl 1D- als auch 2D-Barcodes zu verarbeiten und unterstützt eine breite Palette von Anwendungen, von einfacher Produktkennzeichnung bis hin zur komplexen Datenkodierung.

Gibt es Lizenzoptionen für die kommerzielle Nutzung von IronBarcode?

Iron Software bietet verschiedene Lizenzoptionen für IronBarcode, einschließlich kommerzieller Lizenzen für Unternehmensanwendungen, um die Einhaltung von Geschäftsanforderungen sicherzustellen.

Unterstützt IronBarcode die Stapelverarbeitung von Barcodes?

Ja, IronBarcode unterstützt die Stapelverarbeitung, sodass Entwickler mehrere Barcodes in einem einzigen Vorgang erzeugen oder lesen können, was die Effizienz für groß angelegte Anwendungen erhöht.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 2,240,258 | Version: 2026.5 just released
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package BarCode
Führen Sie ein Beispiel aus und beobachten Sie, wie Ihre Zeichenkette zu einem BarCode wird.