跳至页脚内容
使用 IRONQR

如何在 ASP .NET Core 中生成 QR 代码

二维码已成为现代技术的重要组成部分,提供了一种便捷的方式来存储和传输信息。 在 web开发中,像我们将在 ASP.NET Core中使用 IronQR实现的二维码生成器,提供了动态二维码创建的强大功能。 二维码生成器在票务系统、身份验证、库存管理等各种应用中是不可或缺的。 本文深入探讨了使用 IronQR在 ASP.NET Core中创建二维码的过程,这是为此目的而设计的强大库。 ASP.NET Core作为用于构建 web应用程序的多功能框架,提供了生成二维码的强大功能。 在本文中,我们将深入探讨如何使用来自Iron Software的强大二维码生成库IronQR在 ASP.NET Core中创建二维码的过程。

如何在 ASP.NET Core中生成二维码

  1. 使用 Visual Studio创建 ASP.Net项目
  2. 从包管理器中安装IronQR
  3. 生成二维码
  4. 带格式的生成二维码

理解 IronQR

IronQR是用于 .NET应用程序的高性能二维码生成库。 它提供了一个简单且直观的 API,用于生成具有各种自定义选项的二维码。 IronQR支持 .NET Standard,使其与包括 ASP.NET Core在内的广泛平台兼容。 借助 IronQR,开发人员可以轻松生成具有不同数据类型、纠错水平、大小和格式的二维码。

主要特性

1. 读取和创建二维码

IronQR 使您可以轻松地生成和读取二维码。 无论您是需要动态地创建二维码还是从现有的二维码中提取信息,这个库都能满足您的需求。

2. 用户友好的 API

该库提供了一个用户友好的 API,使开发人员可以快速地将条码功能集成到他们的 .NET项目中。 您可以在短短几分钟内开始使用二维码。

3. 兼容性

IronQR支持多种 .NET版本,包括:

  1. C#、VB.NET、F#
  2. .NET Core (8, 7, 6, 5 和 3.1+)
  3. .NET Standard (2.0+)
  4. .NET Framework (4.6.2+)

它涵盖了从 web(Blazor & WebForms)、移动(Xamarin & MAUI)、桌面(WPF & MAUI)到控制台应用程序等各种类型的项目。

4. QR检测的机器学习模型

IronQR 使用先进的自定义机器学习模型来检测 QR 码。 这确保了准确和可靠的代码识别。 此外,还提供了一种瘦模式选项(非 ML),适合那些偏好轻量处理方式的人。

5. 读取二维码

您可以从包括以下几种格式的图像中读取二维码:

  1. 图片(jpg, png, svg, bmp)
  2. 多页图像(gif, tif, tiff)
  3. System.Drawing位图
  4. IronDrawing 图像 (AnyBitmap)

6. 写入二维码

IronQR允许您为不同类型的文档写入二维码,例如:

  1. 图片(jpg, png, gif, tiff, bmp)
  2. System.Drawing图像
  3. 流(MemoryStream, byte[]
  4. PDF(在现有 PDF上添加印章)

7. 样式化二维码

通过调整大小、调整边距和边框、重新着色、添加徽标来自定义二维码

8. 错误处理与校正

IronQR提供详细的错误消息并支持自定义 QR 的纠错级别。

了解了这些知识后,让我们开始在 ASP.NET Core 中的应用程序中生成二维码。

第 1 步:使用 Visual Studio 创建一个新的 ASP.NET 项目

在深入二维码生成之前,让我们设置一个新的 ASP.NET Core 项目。 以下是启动新项目的步骤:

首先在 Visual Studio 中创建一个新项目,并选择 ASP.Net Core Web App 应用程序模板

如何在 ASP .NET Core 中生成二维码:图 1 - 选择 ASP.NET CORE web 应用程序模板

提供项目名称和位置

如何在 ASP .NET Core 中生成二维码:图 2 - 为项目命名以及你希望保存的位置

选择所需的.NET版本。

如何在 ASP .NET Core 中生成二维码:图 3 - 选择正确的 .NET 版本。

点击"创建"按钮以根据模板生成应用程序代码

如何在 ASP .NET Core 中生成二维码:图 4 - 点击创建按钮以生成模板代码

第 2 步:从包管理器安装 IronQR 库

按照以下所示从 Visual Studio 包管理器安装 IronQR 库。

如何在 ASP .NET Core 中生成二维码:图 5 - 使用 Visual Studio 包管理器搜索 IronOCR 并安装

IronQR也可以使用 NuGet 包管理器安装。

如何在 ASP .NET Core 中生成二维码:图 6 - 使用 NuGet 包管理器搜索 IronOCR

第 3 步:生成一个二维码

现在,让我们创建一个二维码应用。

创建 QRCode 模型

using System.ComponentModel.DataAnnotations;

namespace GenerateQRCode.Models
{
    public class QRCodeModel
    {
        [Display(Name = "Enter QR Code Text")]
        public string QRCodeText { get; set; }
    }
}
using System.ComponentModel.DataAnnotations;

namespace GenerateQRCode.Models
{
    public class QRCodeModel
    {
        [Display(Name = "Enter QR Code Text")]
        public string QRCodeText { get; set; }
    }
}
Imports System.ComponentModel.DataAnnotations

Namespace GenerateQRCode.Models
	Public Class QRCodeModel
		<Display(Name := "Enter QR Code Text")>
		Public Property QRCodeText() As String
	End Class
End Namespace
$vbLabelText   $csharpLabel

创建一个二维码控制器

要添加新控制器,请右键点击控制器文件夹并提供名称,如下所示。

如何在 ASP .NET Core 中生成二维码:图 7 - 通过点击文件夹添加新控制器并为其命名

选择空控制器。

如何在 ASP .NET Core 中生成二维码:图 8 - 在提示中选择空控制器

提供一个名称。

如何在 ASP .NET Core 中生成二维码:图 9 - 为控制器命名

接下来,将以下代码集成到控制器中。

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
$vbLabelText   $csharpLabel

代码解释

命名空间和类定义

代码以使用语句开始,这些语句导入必要的命名空间。 GenerateQRCode.Controllers 命名空间包含 QrCodeController 类。

控制器构造函数

QrCodeController 类有一个构造函数,该构造函数接受 IWebHostEnvironment 参数。 此参数由 ASP.NET Core 注入以处理与 web 托管相关的任务。

动作方法

  • Index():此方法在访问时返回视图(大概是一个 HTML 页面)。 它似乎与 QR 码生成无直接关系。
  • CreateQRCode(QRCodeModel generateQRCode):此方法是 QR 码生成逻辑的核心。 它接收一个 QRCodeModel 对象(可能包含 QR 码文本)作为参数。

方法内部

  • 构造用于保存生成的 QR 码图像的路径。
  • 使用 QrWriter.Write(generateQRCode.QRCodeText) 创建 QR 码对象。
  • 将 QR 码保存为位图图像。
  • 基于 web 请求详细信息构造图像 URL。
  • 使用图像 URL 设置 ViewBag.QrCodeUri 属性。
  • 如果在此过程中发生任何异常,则会抛出。

二维码生成

实际的 QR 码生成发生在 CreateQRCode 方法中。 QrWriter.Write(generateQRCode.QRCodeText) 调用根据提供的文本创建 QR 码对象。

图像保存

生成的 QR 码使用 qrImage.SaveAs(filePath) 保存为位图图像。 图像文件路径根据 web 根路径和所需的文件名构造。

图像 URL

imageUrl 使用 web 请求的方案、主机和路径基创建。 此 URL 指向可以访问生成的 QR 码图像的位置。 总体而言,此控制器处理 QR 码生成、图像的保存和提供图像 URL 以供进一步使用。

向控制器添加视图

要添加新视图,请右键单击 QrCodeController 类中的 CreateQRCode 动作方法。

如何在 ASP .NET Core 中生成二维码:图 10 - 在 `QrCodeController` 类中添加新视图

选择"添加视图"然后选择"Razor 视图"。 点击"添加"按钮。

如何在 ASP .NET Core 中生成二维码:图 11 - 选择添加视图选项,再选择 Razor 视图,再点击添加

然后选择先前生成的"创建"模板和模型类。

如何在 ASP .NET Core 中生成二维码:图 12 - 选择先前生成的 `创建` 模板

现在在视图中替换以下代码

@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
$vbLabelText   $csharpLabel

同样对索引动作方法进行相同操作,以便在应用程序启动时不会抛出 POST 请求错误。

现在在 Program.cs 中更改以下代码以将上述视图设为默认路由。

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

此操作将默认路由从 HomeController 修改为我们的 QrCodeController

现在,编译并运行项目。

如何在 ASP .NET Core 中生成二维码:图 13 - 示例项目的主页

在文本框中输入任何文本并点击"创建"。这将创建一个新的二维码,如下所示。

如何在 ASP .NET Core 中生成二维码:图 14 - 输入任何文字并点击创建以利用 IronQR 创建新的二维码

为二维码添加样式

QrStyleOptions 用于样式化二维码生成。

[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
$vbLabelText   $csharpLabel

输出

如何在 ASP .NET Core 中生成二维码:图 15 - 以编程方式修改二维码的颜色

许可(提供试用)

对于想要测试 IronQR 的开发人员,可以在这里获取试用许可证。 这个许可证密钥需要放置在 appSettings.json 文件中。同样会去除上图中显示的水印。

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

结论

在本文中,我们探讨了如何在 ASP.NET Core 中使用 IronQR 生成 QR 码。 通过利用 IronQR 的强大功能,开发人员可以轻松地将 QR 码生成功能集成到他们的 web 应用程序中。 无论是用于票务、身份验证还是信息共享,QR 码都提供了一种用于高效传输数据的多功能解决方案。 借助 IronQR,在 ASP.NET Core 中创建和定制 QR 码从未如此简单。 开始将二维码生成功能集成到您的 ASP.NET Core 项目中,开启动态数据编码和共享的无限可能。

常见问题解答

如何在 ASP.NET Core 中生成 QR 码?

要在 ASP.NET Core 中生成 QR 码,可以使用 IronQR 库。首先在 Visual Studio 中创建一个新的 ASP.NET 项目,通过包管理器安装 IronQR,并实现代码以使用其用户友好的 API 生成 QR 码。

在 ASP.NET Core 中可以对 QR 码进行哪些自定义选项?

IronQR 提供了多种 QR 码自定义选项,包括调整大小、调整边距、更改颜色和添加徽标。这些可以通过 QrStyleOptions 类进行管理。

在 ASP.NET Core 中生成 QR 码的错误校正是如何工作的?

IronQR 允许您在生成 ASP.NET Core 中的 QR 码时管理错误校正级别。这确保了 QR 码具有所需的错误恢复水平,这对于可靠扫描至关重要。

我可以从 ASP.NET Core 中的不同图像格式读取 QR 码吗?

可以,使用 ASP.NET Core 中的 IronQR,您可以从各种图像格式中读取 QR 码,例如 jpg、png、svg、bmp、gif、tif 和 tiff,以及 System.Drawing 位图和 IronDrawing 图像 (AnyBitmap)。

在没有完整许可证的情况下可以测试 IronQR 吗?

可以,您可以从 Iron Software 网站获取 IronQR 的试用许可证。试用版允许您测试库并在测试阶段通过将许可证放入 appSettings.json 文件中移除生成 QR 码上的水印。

在 Web 应用程序中使用 QR 码有何好处?

QR 码对 Web 应用程序有益,因为它们允许高效的数据存储和传输。它们尤其适用于票务系统、认证和库存管理等应用,提供了一种动态编码和共享信息的方式。

机器学习如何增强 ASP.NET Core 中的 QR 码检测?

IronQR 使用先进的定制机器学习模型进行 QR 码检测,确保代码识别的高精度和可靠性。对于更轻量级解决方案的用户,还提供了非 ML 精简模式。

Jordi Bardia
软件工程师
Jordi 最擅长 Python、C# 和 C++,当他不在 Iron Software 利用这些技能时,他就在游戏编程。分享产品测试、产品开发和研究的责任,Jordi 在持续的产品改进中增加了巨大的价值。多样的经验使他面临挑战并保持投入,他表示这是在 Iron Software 工作的最喜欢的方面之一。Jordi 在佛罗里达州迈阿密长大,并在佛罗里达大学学习计算机科学和统计学。