VS2022创建.NET9 Blazor应用:找不到ASP.NET Core Hosted选项如何构建?
在.NET 9(Visual Studio 2022)中创建带后端API的托管Blazor WebAssembly应用
步骤1:创建Blazor Web App项目
- 打开Visual Studio 2022,选择「创建新项目」,搜索并选中「Blazor Web App」模板,点击「下一步」。
- 填写项目名称、存储路径等基础信息后,点击「下一步」。
- 在「附加信息」配置页:
- 目标框架选择
.NET 9; - 交互类型选择WebAssembly(此选项会自动生成包含ASP.NET Core后端主机的托管结构);
- 根据需求勾选「包含示例页面」(可选,便于快速验证功能);
- 选择合适的身份验证类型(如「无」或「个人用户账户」);
- 点击「创建」完成项目生成。
- 目标框架选择
生成的项目结构说明
生成的解决方案包含三个项目,与旧版「ASP.NET Core Hosted」结构一致:
[项目名]:ASP.NET Core后端主机项目,用于编写API接口、处理后端逻辑;[项目名].Client:Blazor WebAssembly客户端项目,包含前端UI组件与交互逻辑;[项目名].Shared:共享类库,可存放前后端共用的模型、DTO等代码。
步骤2:添加后端API接口
在后端主机项目中创建API控制器:
- 右键点击后端项目 → 「添加」→ 「控制器」→ 「API控制器 - 空」,命名后点击「添加」。
- 编写API示例代码(以WeatherForecast控制器为例):
using Microsoft.AspNetCore.Mvc; namespace YourProjectName.Controllers; [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } [HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); } } public class WeatherForecast { public DateOnly Date { get; set; } public int TemperatureC { get; set; } public string? Summary { get; set; } }
步骤3:客户端调用后端API
在Blazor WebAssembly客户端项目中,通过HttpClient调用API:
- 创建或修改Razor组件(如
Weather.razor):
@page "/weather" @inject HttpClient Http <h3>Weather Forecast</h3> @if (forecasts == null) { <p><em>Loading...</em></p> } else { <table class="table"> <thead> <tr> <th>Date</th> <th>Temperature (C)</th> <th>Summary</th> </tr> </thead> <tbody> @foreach (var forecast in forecasts) { <tr> <td>@forecast.Date.ToShortDateString()</td> <td>@forecast.TemperatureC</td> <td>@forecast.Summary</td> </tr> } </tbody> </table> } @code { private WeatherForecast[]? forecasts; protected override async Task OnInitializedAsync() { forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast"); } public class WeatherForecast { public DateOnly Date { get; set; } public int TemperatureC { get; set; } public string? Summary { get; set; } } }
内容的提问来源于stack exchange,提问作者Genghis
相关产品推荐
相关产品推荐

