發現在代網頁應用程式時,根據使用者的裝置類型(如行動裝置或桌面裝置)來調整使用者體驗是一個常見的需求。本文將教大家如何在 Blazor Server 中使用 IHttpContextAccessor 來檢測使用者的裝置類型,並根據檢測結果提供不同的呈現方式。
解決方案概述
我們將透過以下步驟實現這個功能:
-
注入
IHttpContextAccessor
來取得 HTTP 請求中的 User-Agent 標頭。 -
分析 User-Agent 字串,判斷使用者是否來自行動裝置。
-
根據檢測結果顯示不同的內容。
以下是完整的程式碼範例:
Program.cs:
// 組件中注入 IHttpContextAccessor 並讀取 User-Agent
builder.Services.AddHttpContextAccessor();
YourPage.razor:
@inject IHttpContextAccessor HttpContextAccessor
@code {
private string? UserAgent { get; set; }
private bool IsMobile { get; set; }
protected override void OnInitialized()
{
UserAgent = HttpContextAccessor.HttpContext?.Request.Headers["User-Agent"].ToString();
// 判斷是否為手機
IsMobile = UserAgent != null &&
(UserAgent.Contains("Mobi") || UserAgent.Contains("Android") || UserAgent.Contains("iPhone"));
}
}
<h3>Device Type: @(IsMobile ? "Mobile" : "PC")</h3>
這樣,當使用者開啟應用程式時,頁面會自動判斷並顯示其裝置類型。
在 Blazor WebAssembly 中的注意事項
Blazor WebAssembly 的應用程式是在使用者的瀏覽器中執行的,因此無法直接使用 IHttpContextAccessor
。不過,您可以改用 JavaScript 與 .NET 互操作的方式來實現類似功能。
以下是 WebAssembly 版本的範例:
JavaScript 檔案
在 wwwroot
資料夾中新增一個 JavaScript 檔案,內容如下:
function getUserAgent() {
return navigator.userAgent;
}
修改 Razor 元件程式碼
在 Blazor WebAssembly 中,我們使用 IJSRuntime
與 JavaScript 互操作:
@inject IJSRuntime JSRuntime
@code {
private string? UserAgent { get; set; }
private bool IsMobile { get; set; }
protected override async Task OnInitializedAsync()
{
UserAgent = await JSRuntime.InvokeAsync<string>("getUserAgent");
// 判斷是否為手機
IsMobile = UserAgent != null &&
(UserAgent.Contains("Mobi") || UserAgent.Contains("Android") || UserAgent.Contains("iPhone"));
}
}
<h3>裝置類型:@(IsMobile ? "行動裝置" : "桌面裝置")</h3>
Today's comments have reached the limit. If you want to comment, please wait until tomorrow (UTC-Time).
There is 14h57m49s left until you can comment.