You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:43:12