成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Blazor WebAssembly 應用程序中進行 HTTP 請求

開發 架構
在我的前篇文章《Blazor Server 應用程序中進行 HTTP 請求》中,我介紹了在 Blazor Server 應用程序中進行 HTTP 請求的相關技術,在 Blazor Server App 中您可以訪問所有的 .NET 類庫和組件。但如果您創建的是 Blazor WebAssembly 應用程序,那么您的代碼將在客戶端的瀏覽器沙箱中運行,您的選擇在某種程度上會受到限制。

 [[420386]]

翻譯自 Waqas Anwar 2021年5月13日的文章 《Making HTTP Requests in Blazor WebAssembly Apps》 [1]

[[420387]]

在我的前篇文章《Blazor Server 應用程序中進行 HTTP 請求》中,我介紹了在 Blazor Server 應用程序中進行 HTTP 請求的相關技術,在 Blazor Server App 中您可以訪問所有的 .NET 類庫和組件。但如果您創建的是 Blazor WebAssembly 應用程序,那么您的代碼將在客戶端的瀏覽器沙箱中運行,您的選擇在某種程度上會受到限制。在本教程中,我將向您展示如何在 Blazor WebAssembly 應用程序進行 HTTP 請求。

Blazor WebAssembly 應用程序中的 HttpClient 概述

Blazor WebAssembly 應用程序使用預置的 HttpClient 服務調用 Web API。這個預置的 HttpClient 是使用瀏覽器的 Fetch API[2] 實現的,會有一些限制。HttpClient 還可以使用 Blazor JSON 幫助程序或 HttpRequestMessage 對象進行 API 調用。默認情況下,您只能向同源服務器發送 API 調用請求,不過如果第三方 API 支持跨域資源共享(CORS)的話,您也可以調用其他服務器上的 API。

命名空間 System.Net.Http.Json 為使用 System.Text.Json 執行自動序列化和反序列化的 HttpClient 提供了擴展方法。這些擴展方法將請求發送到一個 Web API URI 并處理相應的響應。常用的方法有:

  • GetFromJsonAsync:發送 HTTP GET 請求,并將 JSON 響應正文解析成一個對象。
  • PostAsJsonAsync:將 POST 請求發送到指定的 URI,并在請求正文中載有序列化為 JSON 的 value。
  • PutAsJsonAsync:發送 HTTP PUT 請求,其中包含 JSON 編碼的內容。

要理解如何將這些方法與 HttpClient 一起使用,我們需要創建兩個項目。第一個項目是一個 Web API 項目,它向客戶端公開一個 Web API。第二個項目是 Blazor WebAssembly 應用程序,它向第一個項目中創建的 Web API 發送 HTTP 請求。

實現一個 ASP.NET Core Web API

在本節中,我們將實現一個支持跨域資源共享 (CORS) 的 Web API,以便 Blazor WebAssembly 應用程序可以調用此 API。在 Visual Studio 2019 中創建一個新的 Web API 項目 BlazorClientWebAPI。我們將創建一個簡單的 API 來返回產品列表,所以首先要在項目中創建一個 Models 文件夾,并在其中添加如下的 Product 類。

Product.cs

  1. public class Product 
  2.     public int Id { get; set; } 
  3.     public string Name { get; set; } 
  4.     public decimal Price { get; set; } 

接下來,創建一個 Controllers 文件夾并在其中添加下面的 ProductsController。該控制器簡單地從 GetProducts 方法返回一些模擬的產品數據。

ProductsController.cs

  1. [Route("api/[controller]")] 
  2. [ApiController] 
  3. public class ProductsController : ControllerBase 
  4.     [HttpGet] 
  5.     public IActionResult GetProducts() 
  6.     { 
  7.         var products = new List<Product>() 
  8.         { 
  9.             new Product() 
  10.             { 
  11.                 Id = 1, 
  12.                 Name = "Wireless Mouse"
  13.                 Price = 29.99m 
  14.             }, 
  15.             new Product() 
  16.             { 
  17.                 Id = 2, 
  18.                 Name = "HP Headphone"
  19.                 Price = 79.99m 
  20.             }, 
  21.             new Product() 
  22.             { 
  23.                 Id = 3, 
  24.                 Name = "Sony Keyboard"
  25.                 Price = 119.99m 
  26.             } 
  27.         }; 
  28.   
  29.         return Ok(products); 
  30.     } 

現在如果您運行該項目,并嘗試在瀏覽器中使用 URI api/products 訪問該 API,您應該能看到以 JSON 格式返回的產品數據。

在 ASP.NET Core Web API 中啟用 CORS

默認情況下,瀏覽器安全性不允許一個網頁向除提供該網頁的域之外的其他域發送請求。這種約束稱之為同源策略。如果我們希望 Blazor WebAssembly 應用程序或其他客戶端應用程序使用上述 Web API,那么我們必須啟用跨域資源共享 (CORS)。打開 Startup.cs 文件,并在 ConfigureServices 方法中調用 AddCors 方法。

  1. public void ConfigureServices(IServiceCollection services) 
  2.     services.AddCors(policy => 
  3.     { 
  4.         policy.AddPolicy("CorsPolicy", opt => opt 
  5.             .AllowAnyOrigin() 
  6.             .AllowAnyHeader() 
  7.             .AllowAnyMethod()); 
  8.     }); 
  9.   
  10.     services.AddControllers(); 

同時,在 Startup.cs 文件的 Configure 方法中添加以下代碼行。

  1. app.UseCors("CorsPolicy"); 

有關使用 ASP.NET Core 應用程序的 CORS 的詳細信息,請參閱 《Enable Cross-Origin Requests (CORS) in ASP.NET Core》[3]。

實現 Blazor WebAssembly 應用程序

在創建上述 Web API 項目的同一解決方案中添加一個新的 Blazor WebAssembly 應用程序項目 BlazorClientWebAPIsDemo。

我們需要確保的第一件事是,在項目文件中有 System.Net.Http.Json 的引用。如果沒有,那么您可以添加該引用。

  1. <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"
  2.    <PropertyGroup> 
  3.       <TargetFramework>net5.0</TargetFramework> 
  4.    </PropertyGroup> 
  5.    <ItemGroup> 
  6.       <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.1" /> 
  7.       <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.1" PrivateAssets="all" /> 
  8.       <PackageReference Include="System.Net.Http.Json" Version="5.0.0" /> 
  9.    </ItemGroup> 
  10. </Project> 

接下來,我們需要在 Program.cs 文件中配置 HttpClient 服務。確保提供了要從 Blazor WebAssembly 應用程序調用的 Web API 的基地址。

Program.cs

  1. public static async Task Main(string[] args) 
  2.     var builder = WebAssemblyHostBuilder.CreateDefault(args); 
  3.     builder.RootComponents.Add<App>("#app"); 
  4.   
  5.     builder.Services.AddScoped(sp => new HttpClient 
  6.     { 
  7.         BaseAddress = new Uri("http://localhost:5000/api/"
  8.     });  
  9.   
  10.     await builder.Build().RunAsync(); 

為了使用產品 API,我們在 Pages 文件夾中創建一個 Products.razor 組件。該視圖非常簡單,因為它只是迭代產品列表并使用簡單的 HTML 表格來顯示它們。

Products.razor

  1. @page "/products" 
  2.   
  3. <h1>Products</h1> 
  4.   
  5. @if (products == null
  6.     <p><em>Loading...</em></p> 
  7. else 
  8.     <table class="table"
  9.         <thead> 
  10.             <tr> 
  11.                 <th>Id</th> 
  12.                 <th>Name</th> 
  13.                 <th>Price</th> 
  14.             </tr> 
  15.         </thead> 
  16.         <tbody> 
  17.             @foreach (var forecast in products) 
  18.             { 
  19.                 <tr> 
  20.                     <td>@forecast.Id</td> 
  21.                     <td>@forecast.Name</td> 
  22.                     <td>@forecast.Price</td> 
  23.                 </tr> 
  24.             } 
  25.         </tbody> 
  26.     </table

創建一個代碼隱藏文件 Products.razor.cs,并將配置的 HttpClient 實例作為私有成員注入到該類中。最后,使用 GetFromJsonAsync 方法調用產品 API。

Products.razor.cs

  1. public partial class Products 
  2.     private List<Product> products; 
  3.   
  4.     [Inject] 
  5.     private HttpClient Http { get; set; } 
  6.   
  7.     protected override async Task OnInitializedAsync() 
  8.     { 
  9.         products = await Http.GetFromJsonAsync<List<Product>>("products"); 
  10.     }  

您還需要在 Blazor WebAssembly 項目中創建一個 Product 類的本地副本,以將產品 API 的結果反序列化為產品對象列表。

  1. public class Product 
  2.     public int Id { get; set; } 
  3.     public string Name { get; set; } 
  4.     public decimal Price { get; set; } 

運行該項目,您將看到從后端 Web API 加載了產品的頁面。

 

 

責任編輯:武曉燕 來源: 技術譯站
相關推薦

2010-12-30 16:22:28

Visual C++用戶訪問協議

2020-09-22 15:06:51

JavaScript前端技術

2017-08-31 15:20:03

PythonPython3HTTP

2010-02-07 10:21:27

Android應用程序

2010-02-22 15:49:35

Python應用程序

2010-02-26 09:55:22

Python應用程序

2025-03-21 06:57:44

2021-12-27 10:46:07

WebAPIserver簽名

2010-02-22 14:54:47

Python應用程序

2022-08-31 11:46:46

物聯網

2024-01-15 06:05:05

DockerGol ang應用程序

2022-10-08 00:53:12

HTTP物聯網應用程序

2017-12-29 10:29:34

HTTP驅動程序

2023-03-30 08:29:14

HTTP緩存Web應用

2009-06-02 16:05:04

Struts驅動開發

2012-06-07 09:15:14

ibmdw

2012-05-29 10:04:08

2010-07-20 11:35:41

避免SQL Serve

2013-01-29 10:40:26

云環境應用程序開發

2009-12-30 15:47:14

ADO 記錄集
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品视频区 | 亚洲福利在线视频 | 自拍偷拍亚洲欧美 | 国产美女一区二区 | 免费国产视频 | 狼色网| 久久777 | 一区二区三区免费 | 午夜伦理影院 | 免费成人高清在线视频 | 欧美亚洲国语精品一区二区 | 午夜激情网 | 精品96久久久久久中文字幕无 | 国产午夜精品久久久 | 一本大道久久a久久精二百 国产成人免费在线 | 欧美成人一区二区 | 国产成人综合一区二区三区 | 99视频在线 | 在线男人天堂 | 国产一二三区在线 | 欧美日韩在线观看一区 | 久久久91精品国产一区二区三区 | 国产黄色免费网站 | 国产一区二区三区免费 | 日本一区二区三区在线观看 | 色www精品视频在线观看 | 国产成人免费视频网站高清观看视频 | 日本不卡免费新一二三区 | 亚洲 中文 欧美 日韩 在线观看 | 久久九| 国产精品18毛片一区二区 | 91色在线视频 | 日韩欧美日韩在线 | 日韩欧美二区 | 国产精品久久av | 国产精品久久久精品 | 国产精品久久久久久久久久久久久 | 九九九久久国产免费 | 殴美成人在线视频 | 一级片在线观看视频 | 国产精品视频导航 |