使用IRONQR

如何在ASP .NET中扫描QR码

发布 2024年六月6日
分享:

简介

二维码在我们的数字世界中已无处不在,经常被用于广告、零售、活动管理等领域。对于使用 ASP.NET 框架的开发人员来说,将二维码扫描功能集成到网络应用程序中可以增强用户体验和功能。本文将探讨在 ASP.NET 应用程序中实施 QR 码扫描器的过程,包括所需的工具、库和逐步实施。我们将使用 IronQR是一个功能强大的二维码生成库,可从 铁软件 来读取 QR 码。

如何在 ASP .NET 中扫描 QR 码

1.使用 Visual Studio 创建 ASP.NET 项目

2.安装 IronQR 软件包管理器中的库

3.上传 QR 图像并读取 QR。

4.读取高级二维码

了解 QR 码及其使用案例

二维码 (快速反应) 二维码是一种二维条形码,可存储从 URL 到联系方式等各种信息,通常使用智能手机或专用扫描设备进行扫描。在网络应用中,QR 码有多种用途,如

  • 快速访问网站:引导用户访问特定 URL,无需键入。
  • 活动票务:验证活动门票上的二维码。
  • 支付系统:通过扫描二维码方便付款。
  • 产品信息:提供有关产品的其他信息。

IronQR 简介

IronQR 是一个功能强大的.NET 库,专为 QR 代码生成和扫描而设计,功能强大且易于使用。这个多功能库不仅能处理 QR 代码,还能管理其他类型的条形码,因此成为 .NET 生态系统内开发人员的首选。在此,我们将探讨如何将 IronQR 库集成到 ASP.NET 应用程序中,以方便 QR 码扫描。

IronQR 的主要优势和功能

  1. 读取 QR 码IronQR 可以读取各种图像格式的 QR 码,包括 jpg、png、svg、bmp、gif、tif、tiff 等。它还支持多页图像和自定义 QR 检测模型。输出数据格式包括文本、URL、坐标等。

  2. 编写 QR 代码:您可以生成二维码并将其保存为图片 (JPG、PNG、GIF、TIFF、BMP)您还可以在 PDF 文件、数据流或甚至在现有 PDF 文件上加盖印章。对文本、URL、字节和数字等数据进行编码并生成 QR 码。通过调整大小、调整边距、重新着色和添加徽标,自定义二维码样式。

  3. 错误处理和纠正IronQR 提供详细的错误信息和自定义 QR 纠错。它可确保容错,并支持空值检查和校验和。

  4. 先进的机器学习模型IronQR 使用先进的机器学习模型进行 QR 代码识别。该模型可确保在各种平台(包括移动、桌面和云环境)上准确可靠地读取 QR 码。

  5. 跨平台兼容性IronQR 设计用于 C#、F# 和 VB.NET,可在各种 .NET 版本(如 .NET Core)上运行 (8、7、6、5 和 3.1+), .NET 标准 (2.0+), .NET Framework (4.6.2+)

6.它支持不同的项目类型,包括网络 (Blazor 和 WebForms)手机 (Xamarin 和 MAUI)桌面 (WPF 和 MAUI)和控制台应用程序。

  1. 广泛的 QR 码支持:IronQR 擅长处理各种 QR 码和其他类型的条形码。无论您处理的是标准 QR 码、Micro QR 码、QR 码条形码图像,还是 Aztec 或 Data Matrix 等特定格式、 IronQR 为您提供支持。IronQR 还支持读取 QR 码条形码的功能。

IronQR .NET应用程序接口产品,其中包括用于办公文档、PDF编辑、OCR等的各种工具。

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

首先创建一个新项目,然后选择 MVC 模板,如下所示

如何在 ASP .NET 中扫描 QR 码:图 1 - 使用 Visual Studio 创建一个新的 ASP.NET 项目

接下来,您应提供项目名称和项目位置。

如何在 ASP .NET 中扫描 QR 码:图 2 - 提供项目名称和希望保存的位置。

选择 .NET 版本。

如何在 ASP .NET 中扫描 QR 码:图 3 - 选择要使用的 .NET 版本。

点击创建按钮将创建以下代码和项目。

如何在 ASP .NET 中扫描 QR 码:图 4 - 单击创建按钮,Visual Studio 将为您提供项目模板

第 2 步:从 Visual Studio 软件包管理器安装 IronQR 库

安装 IronQR 库,如下所示

如何在 ASP .NET 中扫描 QR 码:图 5 - 使用 Visual Studio 软件包管理器搜索并安装 IronQR

IronQR 也可以使用 NuGet 软件包管理器。

如何在 ASP .NET 中扫描 QR 码:图 6 - 通过 NuGet 软件包管理器搜索 IronQR

第 3 步:上传 QR 图像并读取 QR 图像

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

创建 QrCode 模型

using System.ComponentModel.DataAnnotations;
namespace IronQRScannerAsp.Models
{
    public class QRCodeModel
    {
        [Display(Name = "Select QR Image")]
        public IFormFile QRCodeImage
        {
            get;
            set;
        }
    }
}
using System.ComponentModel.DataAnnotations;
namespace IronQRScannerAsp.Models
{
    public class QRCodeModel
    {
        [Display(Name = "Select QR Image")]
        public IFormFile QRCodeImage
        {
            get;
            set;
        }
    }
}
Imports System.ComponentModel.DataAnnotations
Namespace IronQRScannerAsp.Models
	Public Class QRCodeModel
		<Display(Name := "Select QR Image")>
		Public Property QRCodeImage() As IFormFile
	End Class
End Namespace
VB   C#

创建 QR 码控制器

右键单击控制器文件夹,添加一个新控制器,并提供一个如下所示的名称:

如何在 ASP .NET 中扫描 QR 码:图 7 - 点击文件夹添加新控制器并为其命名

选择空控制器。

如何在 ASP .NET 中扫描 QR 码:图 8 - 单击提示符上的空控制器

提供控制器名称。

如何在 ASP .NET 中扫描 QR 码:图 9 - 命名控制器

现在在控制器中添加以下代码

using IronQr;
using IronQRScannerAsp.Models;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;
namespace IronQRScannerAsp.Controllers
{
    public class QrCodeController : Controller
    {
        private readonly IWebHostEnvironment _environment;
        public QrCodeController(IWebHostEnvironment environment)
        {
            _environment = environment;
        }
        public IActionResult Index()
        {
          ViewBag.QrCodeText = "Text";
          return View();
        }
        [HttpPost]
        public IActionResult ScanQRCode(QRCodeModel qrImage)
        {
            string path = Path.Combine(_environment.WebRootPath, "ScanQRCode");
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            string filePath = Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png");
            using (var stream = System.IO.File.Create(filePath))
            {
                qrImage.QRCodeImage.CopyTo(stream);
            }
            // Open the asset to read a QR Code from
            var bitmap = AnyBitmap.FromFile(filePath);
            // Load the asset into QrImageInput
            QrImageInput imageInput = new QrImageInput(bitmap);
            // Create a QR Reader object
            QrReader reader = new QrReader();
            // Read the Input an get all embedded QR Codes
            IEnumerable<QrResult> results = reader.Read(imageInput);
            ViewBag.QrCodeText = results.First().Value;
            string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/ScanQRCode/qrcode.png";
            ViewBag.QrCodeUri = imageUrl;
          return View();
        }
    }
}
using IronQr;
using IronQRScannerAsp.Models;
using IronSoftware.Drawing;
using Microsoft.AspNetCore.Mvc;
namespace IronQRScannerAsp.Controllers
{
    public class QrCodeController : Controller
    {
        private readonly IWebHostEnvironment _environment;
        public QrCodeController(IWebHostEnvironment environment)
        {
            _environment = environment;
        }
        public IActionResult Index()
        {
          ViewBag.QrCodeText = "Text";
          return View();
        }
        [HttpPost]
        public IActionResult ScanQRCode(QRCodeModel qrImage)
        {
            string path = Path.Combine(_environment.WebRootPath, "ScanQRCode");
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            string filePath = Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png");
            using (var stream = System.IO.File.Create(filePath))
            {
                qrImage.QRCodeImage.CopyTo(stream);
            }
            // Open the asset to read a QR Code from
            var bitmap = AnyBitmap.FromFile(filePath);
            // Load the asset into QrImageInput
            QrImageInput imageInput = new QrImageInput(bitmap);
            // Create a QR Reader object
            QrReader reader = new QrReader();
            // Read the Input an get all embedded QR Codes
            IEnumerable<QrResult> results = reader.Read(imageInput);
            ViewBag.QrCodeText = results.First().Value;
            string imageUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}" + "/ScanQRCode/qrcode.png";
            ViewBag.QrCodeUri = imageUrl;
          return View();
        }
    }
}
Imports IronQr
Imports IronQRScannerAsp.Models
Imports IronSoftware.Drawing
Imports Microsoft.AspNetCore.Mvc
Namespace IronQRScannerAsp.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
		  ViewBag.QrCodeText = "Text"
		  Return View()
		End Function
		<HttpPost>
		Public Function ScanQRCode(ByVal qrImage As QRCodeModel) As IActionResult
			Dim path As String = System.IO.Path.Combine(_environment.WebRootPath, "ScanQRCode")
			If Not Directory.Exists(path) Then
				Directory.CreateDirectory(path)
			End If
			Dim filePath As String = System.IO.Path.Combine(_environment.WebRootPath, "ScanQRCode/qrcode.png")
			Using stream = System.IO.File.Create(filePath)
				qrImage.QRCodeImage.CopyTo(stream)
			End Using
			' Open the asset to read a QR Code from
			Dim bitmap = AnyBitmap.FromFile(filePath)
			' Load the asset into QrImageInput
			Dim imageInput As New QrImageInput(bitmap)
			' Create a QR Reader object
			Dim reader As New QrReader()
			' Read the Input an get all embedded QR Codes
			Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)
			ViewBag.QrCodeText = results.First().Value
			Dim imageUrl As String = $"{Me.Request.Scheme}://{Me.Request.Host}{Me.Request.PathBase}" & "/ScanQRCode/qrcode.png"
			ViewBag.QrCodeUri = imageUrl
		  Return View()
		End Function
	End Class
End Namespace
VB   C#

代码解释

提供的代码片段用于名为 QrCodeController 的 ASP.NET Core MVC 控制器,该控制器旨在使用 IronQR 库处理二维码扫描功能。下面是代码的简要说明:

1.保存上传的二维码图像

路径建设

它构建文件路径 (路) 在应用程序的网络根目录中,专门用于保存二维码图像 ("ScanQRCode "目录).

它会检查该目录是否存在,如果不存在,则创建该目录,以避免在保存文件时出现找不到文件的错误。

文件保存

它会构建完整的文件路径 (文件路径) 上传的 QR 码图像将保存在何处 ("ScanQRCode/qrcode.png").这将覆盖同名的任何现有文件,从而有效处理新扫描,而不会累积文件。

打开文件流,复制上传图像的内容 (qrImage.QRCodeImage",可能是表单文件) 到服务器上的指定位置。

2.解码 QR 码

读取图像文件

使用 `AnyBitmap.FromFile(文件路径)将保存的图像文件加载为适合 QR 码扫描的格式。AnyBitmap "可能是一个辅助类,用于将图像文件转换成 QR 阅读器可以处理的位图对象。

初始化 QR 阅读器

将加载的位图封装成一个 QrImageInput,它是专门为 QR 码读取过程设计的输入。实例化 "QrReader",它是 IronQR 库的一个组件,用于检测和解码二维码。

扫描二维码

调用 reader.Read(图像输入)扫描图片以获取 QR 码。该方法返回一个IEnumerable其中,每个 QrResult 包含来自图像中检测到的二维码的数据。它使用 results.First 提取第一个结果的值。().Value",并将解码后的信息存储在 "ViewBag.QrCodeText "中。这样做的前提是图像至少包含一个 QR 码,而不会处理检测不到 QR 码的潜在错误。

3.准备和退回答复

构建图像 URL

构建 URL (imageUrl) 指向服务器上保存的二维码图像。该 URL 是使用当前 HTTP 请求的方案、主机和路径基础构建的,确保用户可以访问查看。构建的 URL 保存在 ViewBag.QrCodeUri 中。

查看返回

返回同一视图 (查看()`),它可能会向用户显示二维码图像和解码文本。ViewBag "用于将二维码的解码文本和图片的 URL 传递给视图进行渲染。

为控制器类添加视图

添加一个新视图,右击 QrCodeController 类中的 CreateQRCode 操作方法。

如何在 ASP .NET 中扫描 QR 码:图 10 - 在 `QrCodeController` 类中添加一个新视图

选择 "添加视图 "选项,然后选择 "Razor View"。点击 "添加"。

如何在 ASP .NET 中扫描 QR 码:图 11 - 选择 添加视图 选项,然后选择 剃刀视图,再选择 添加。

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

如何在 ASP .NET 中扫描 QR 码:图 12 - 选择先前生成的创建模板

现在将视图类中的代码替换为下图所示的代码。

@model IronQRScannerAsp.Models.QRCodeModel
@{
    ViewData["Title"] = "ScanQRCode";
}
<h1>ScanQRCode</h1>
<h4>QRCodeModel</h4>
<hr />
<div class="row">
    <div class="col-md-14">
        <form asp-action="ScanQRCode" enctype="multipart/form-data">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
            </div>
            <div class="form-group">
                <h3>Scanned Text:</h3>
                <h4>@ViewBag.QrCodeText</h4>
            </div>
            <div class="form-group">
                <img src="@ViewBag.QrCodeUri" class="img-thumbnail" />
            </div>
        </form>
    </div>
</div>
<div>
    <a asp-action="Index">Clear</a>
</div>
@section Scripts {
    @{
        await Html.RenderPartialAsync("_ValidationScriptsPartial");
    }
}
@model IronQRScannerAsp.Models.QRCodeModel
@{
    ViewData["Title"] = "ScanQRCode";
}
<h1>ScanQRCode</h1>
<h4>QRCodeModel</h4>
<hr />
<div class="row">
    <div class="col-md-14">
        <form asp-action="ScanQRCode" enctype="multipart/form-data">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
            </div>
            <div class="form-group">
                <h3>Scanned Text:</h3>
                <h4>@ViewBag.QrCodeText</h4>
            </div>
            <div class="form-group">
                <img src="@ViewBag.QrCodeUri" class="img-thumbnail" />
            </div>
        </form>
    </div>
</div>
<div>
    <a asp-action="Index">Clear</a>
</div>
@section Scripts {
    @{
        await Html.RenderPartialAsync("_ValidationScriptsPartial");
    }
}
model ReadOnly Property () As IronQRScannerAsp.Models.QRCodeModel
	ViewData("Title") = "ScanQRCode"
End Property
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> </div> <div class="form-group"> <h3> Scanned Text:</h3> <h4> @ViewBag.QrCodeText</h4> </div> <div class="form-group"> <img src="@ViewBag.QrCodeUri" class="img-thumbnail" /> </div> </form> </div> </div> <div> <a asp-action="Index"> Clear</a> </div> @section Scripts
"form-group"> </div> <div class="form-group"> (Of h3) Scanned Text
	Inherits </h3>(Of h4) ViewBag.QrCodeText</h4> </div> <div class="form-group"> <img src="@ViewBag.QrCodeUri" class="img-thumbnail" /> </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> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> </div> <div class
"text-danger"></div> <div class="form-group"> </div> <div class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <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 Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary="ModelOnly" class
"multipart/form-data"> <div asp-validation-summary="ModelOnly" class
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary
"ScanQRCode" enctype="multipart/form-data"> <div asp-validation-summary
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action="ScanQRCode" enctype
"col-md-14"> <form asp-action="ScanQRCode" enctype
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: Private Private Private Private Private Friend <h1> ScanQRCode</h1> <h4> QRCodeModel</h4> <hr /> <div Class="row"> <div class="col-md-14"> <form asp-action
"row"> <div class="col-md-14"> <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 Friend (Of h1) ScanQRCode</h1> (Of h4) QRCodeModel</h4> <hr /> <div Class="row"> <div class
	@
	If True Then
		Await Html.RenderPartialAsync("_ValidationScriptsPartial")
	End If
End Class
VB   C#

现在在 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}")
VB   C#

这将把默认路由从 HomeController 改为我们的 QrCode Controller。

用 URL 输入图像:https://ironsoftware.com/csharp/qr

如何在 ASP .NET 中扫描 QR 码:图 13 - QR 码输入示例

输出

如何在 ASP .NET 中扫描 QR 码:图 14 - 按上述步骤操作后的输出示例

在页面上选择一个 QR 码图像,点击上传即可解码 QR 码。此应用程序也可修改为从视频源读取并显示结果。

第 4 步:读取高级 QR 码

要读取高级 QR 码,IronQR 提供以下设置。

using IronQr;
using IronSoftware.Drawing;
using IronQr.Enum;
using System.Collections.Generic;
var inputBmp = AnyBitmap.FromFile("QrImage.png");
// Use Auto => Machine Learning Scan
// Careful Scan => Useful for scanning documents slowly and carefully
QrImageInput scan_ML_and_normal = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results1 = new QrReader().Read(scan_ML_and_normal);
// Use Machine Learning Scan
// High Speed => For scanning frames from a camera
QrImageInput scan_ML_only = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results2 = new QrReader().Read(scan_ML_only);
// Use Scan without Machine Learning
QrImageInput scan_normal_only = new QrImageInput(inputBmp, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> results3 = new QrReader().Read(scan_normal_only);
using IronQr;
using IronSoftware.Drawing;
using IronQr.Enum;
using System.Collections.Generic;
var inputBmp = AnyBitmap.FromFile("QrImage.png");
// Use Auto => Machine Learning Scan
// Careful Scan => Useful for scanning documents slowly and carefully
QrImageInput scan_ML_and_normal = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results1 = new QrReader().Read(scan_ML_and_normal);
// Use Machine Learning Scan
// High Speed => For scanning frames from a camera
QrImageInput scan_ML_only = new QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> results2 = new QrReader().Read(scan_ML_only);
// Use Scan without Machine Learning
QrImageInput scan_normal_only = new QrImageInput(inputBmp, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> results3 = new QrReader().Read(scan_normal_only);
Imports IronQr
Imports IronSoftware.Drawing
Imports IronQr.Enum
Imports System.Collections.Generic
Private inputBmp = AnyBitmap.FromFile("QrImage.png")
' Use Auto => Machine Learning Scan
' Careful Scan => Useful for scanning documents slowly and carefully
Private scan_ML_and_normal As New QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel)
Private results1 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_ML_and_normal)
' Use Machine Learning Scan
' High Speed => For scanning frames from a camera
Private scan_ML_only As New QrImageInput(inputBmp, QrScanMode.OnlyDetectionModel)
Private results2 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_ML_only)
' Use Scan without Machine Learning
Private scan_normal_only As New QrImageInput(inputBmp, QrScanMode.OnlyBasicScan)
Private results3 As IEnumerable(Of QrResult) = (New QrReader()).Read(scan_normal_only)
VB   C#

通过利用最新的 ML 技术,我们将 QR 码阅读器提升到了新的高度。即使在复杂的条件下,复杂的 ML 模型也能提高 QR 码解码应用的准确性和效率。无论是从静态图像、视频流还是实时摄像机馈送中读取二维码,ML 驱动的解决方案都能快速、可靠地提供所需的信息。这一创新简化了数据检索,并通过识别真实 QR 码和标记潜在威胁来提高安全性。有了我们的 ML 技术,您就可以确信您的 QR 码扫描能力处于最前沿,为您的用户提供流畅、安全的体验。

许可证 (可试用)

开发人员可从以下网站获取 IronQR 试用许可证 这里.密钥需要放在 appSettings.json 中。

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

结论

在本文中,我们探讨了如何在 ASP.NET Core 中使用 IronQR.整合 IronQR 在 ASP.NET 应用程序中加入 QR 码扫描功能是一个简单直接的过程,可以增强网络应用程序的功能,使其更具交互性和用户友好性。 IronQR的强大功能和易用性使其成为开发人员实现条形码相关功能的绝佳选择。

< 前一页
如何在ASP .NET Core中生成QR码
下一步 >
如何在C#中扫描QR码

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 15,918 查看许可证 >