跳過到頁腳內容
使用 IRONQR

如何在 ASP .NET Core 中產生 QR 碼

二維碼已成為現代技術不可或缺的一部分,為儲存和傳輸資訊提供了一種便捷的方式。 在 Web 開發中,像我們將在 ASP.NET Core 中使用 IronQR 實現的這種二維碼產生器,為動態建立二維碼提供了強大的功能。 二維碼產生器在票務系統、身份驗證、庫存管理等各種應用中都具有不可估量的價值。 本文深入探討如何使用 IronQR(專為此目的而設計的強大函式庫)在 ASP.NET Core 中建立二維碼的流程。 ASP.NET Core 作為一個功能全面的 Web 應用程式建立框架,提供了強大的二維碼產生功能。 在本文中,我們將深入探討如何使用IronQRIron Software出品的強大二維碼產生函式庫)在 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. 用於二維碼檢測的機器學習模型

IronQR 使用先進的客製化機器學習模型來偵測二維碼。 這確保了代碼識別的準確性和可靠性。 此外,也為喜歡輕便方式的使用者提供了纖薄模式(非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. 流( MemoryStreambyte[]
  4. PDF(在現有 PDF 上加蓋印章)

7. 二維碼樣式

透過調整大小、調整邊距和邊框、重新著色、新增標誌等方式自訂二維碼

8. 錯誤處理與糾正

IronQR提供詳細的錯誤訊息,並支援自訂二維碼糾錯等級。

掌握了這些知識後,讓我們開始在 ASP.NET Core 中開發產生二維碼的應用程式。

步驟 1:使用 Visual Studio 建立一個新的 ASP.NET 項目

在深入探討二維碼產生之前,讓我們先建立一個新的 ASP.NET Core 專案。 以下是啟動新專案的步驟:

首先在 Visual Studio 中建立一個新項目,然後選擇 ASP.NET Core Web 應用程式範本。

如何在 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

程式碼解釋

命名空間和類別定義

程式碼以 using 語句開頭,這些語句導入必要的命名空間。 GenerateQRCode.Controllers命名空間包含QrCodeController類別。

控制器建構函數

QrCodeController類別有一個建構函數,該構造函數接受一個IWebHostEnvironment參數。 此參數由 ASP.NET Core 注入,用於處理與 Web 託管相關的任務。

行動方法

  • Index() :存取此方法時會傳回一個視圖(可能是 HTML 頁面)。 這似乎與二維碼生成沒有直接關係。
  • CreateQRCode(QRCodeModel generateQRCode) : 此方法是二維碼產生邏輯的核心。 它接收一個QRCodeModel物件(大概包含二維碼文字)作為參數。

在方法內部

  • 建立用於保存生成的二維碼圖像的路徑。
  • 使用QrWriter.Write(generateQRCode.QRCodeText)建立一個 QR 碼物件。
  • 將二維碼儲存為點陣圖影像。
  • 根據網頁請求詳情建立圖像 URL。
  • ViewBag.QrCodeUri屬性設定為圖片 URL。
  • 如果在此過程中發生任何異常,則會拋出這些異常。

二維碼生成

實際的二維碼產生是在CreateQRCode方法中完成的。 QrWriter.Write(generateQRCode.QRCodeText)呼叫會根據所提供的文字建立一個二維碼物件。

影像保存

使用qrImage.SaveAs(filePath)將產生的二維碼儲存為點陣圖影像。 圖片檔案路徑是根據網站根路徑和所需的檔案名稱建構的。

圖片網址

imageUrl由 Web 要求的協定、主機和路徑基址構成。 此網址指向可存取產生的二維碼影像的位置。 總的來說,該控制器負責產生二維碼、保存圖像,並提供圖像 URL 以供進一步使用。

將視圖新增至控制器

若要新增視圖,請右鍵點選QrCodeController類別中的CreateQRCode操作方法。

如何在 ASP.NET Core 中產生二維碼:圖 10 - 在QrCodeController類別中新增視圖

選擇"新增視圖",然後選擇"Razor視圖"。 點擊"新增"按鈕。

如何在 ASP.NET Core 中產生二維碼:圖 11 - 選擇"新增視圖"選項,然後選擇"Razor 視圖",再選擇"新增"。

然後選擇之前產生的"創建"模板和模型類別。

如何在 ASP.NET Core 中產生二維碼:圖 12 - 選擇先前產生的Create模板

現在將以下程式碼替換到視圖中

@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

對 index 操作方法也進行相同的操作,這樣當應用程式啟動時,就不會因 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"
}

結論

在本文中,我們探討如何使用 IronQR 在 ASP.NET Core 中產生二維碼。 利用 IronQR 的強大功能,開發人員可以輕鬆地將二維碼產生功能整合到他們的 Web 應用程式中。 無論是票務、身份驗證還是資訊共享,二維碼都提供了一種高效傳輸資料的多功能解決方案。 借助 IronQR,在 ASP.NET Core 中建立和自訂二維碼從未如此簡單。 將二維碼產生功能整合到您的 ASP.NET Core 專案中,開啟動態資料編碼和共享的無限可能。

常見問題解答

如何在 ASP.NET Core 中產生 QR 碼?

若要在 ASP.NET Core 中產生 QR 碼,您可以使用 IronQR 函式庫。首先在 Visual Studio 中建立新的 ASP.NET 專案,透過套件管理員安裝 IronQR,並使用其友善的 API 實作程式碼以產生 QR 碼。

ASP.NET Core 中的 QR 碼有哪些自訂選項?

IronQR 為 ASP.NET Core 中的 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 Bitmaps 和 IronDrawing Images (AnyBitmap)。

是否可以在沒有完整授權的情況下測試 IronQR?

是的,您可以從 Iron Software 網站取得 IronQR 的試用授權。試用版允許您在測試階段測試函式庫,並透過在 appSettings.json 檔案中放置授權,移除所產生 QR 碼的水印。

在 Web 應用程式中使用 QR 碼有什麼好處?

QR 代碼有利於網路應用程式,因為它們可以有效地儲存和傳輸資料。它們在票務系統、驗證和庫存管理等應用程式中特別有用,提供了一種動態的方式來編碼和分享資訊。

機器學習如何增強 ASP.NET Core 中的 QR 碼偵測?

IronQR 利用先進的客製化機器學習模型進行 QR 代碼偵測,確保代碼辨識的高準確性與可靠性。對於偏好更輕量級解決方案的使用者,我們也提供非 ML 的 Slim Mode。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担产品测测试,产品开发和研究的责任时,Jordi 为持续的产品改进增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。