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

.NET8 Blazor交互式自动模板:客户端调用服务端Controller方法及引用配置

.NET8 Blazor 客户端调用服务端Controller 配置指南

一、正确添加项目引用(共享模型用)

如果客户端需要用到服务端的Models,按以下步骤操作:

  • 右键Blazor客户端项目(myClientProject.Client)→ 「添加」→ 「项目引用」
  • 在弹窗中找到服务端项目(myServerProject.Server),勾选后点击「确定」
  • 若添加失败,先检查两个项目的目标框架是否均为.NET8,不行就右键解决方案→「清理解决方案」→「重建解决方案」后重试

二、服务端Controller示例

在服务端的Controllers文件夹中新建测试用Controller,比如WeatherForecastController.cs:

using Microsoft.AspNetCore.Mvc;
using myServerProject.Server.Models;

namespace myServerProject.Server.Controllers;

[ApiController]
[Route("api/[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    [HttpGet]
    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();
    }
}

对应的Models/WeatherForecast.cs:

namespace myServerProject.Server.Models;

public class WeatherForecast
{
    public DateOnly Date { get; set; }
    public int TemperatureC { get; set; }
    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
    public string? Summary { get; set; }
}

三、客户端配置与API调用实现

1. 注册HttpClient

打开客户端项目的Program.cs,注册HttpClient:

using Microsoft.AspNetCore.Components.WebAssembly.Hosting;

var builder = WebAssemblyHostBuilder.CreateDefault(args);

// 注册HttpClient,指定服务端API基地址
builder.Services.AddScoped(sp => new HttpClient
{
    BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)
});

await builder.Build().RunAsync();

若服务端与客户端不在同一端口,直接将BaseAddress替换为服务端实际地址,比如new Uri("https://localhost:5001/")

2. 在组件中调用API

以客户端Pages/FetchData.razor为例,注入HttpClient并调用接口:

@page "/fetchdata"
@inject HttpClient Http
@using myServerProject.Server.Models

<h3>Weather forecast</h3>

@if (forecasts == null)
{
    <p><em>Loading...</em></p>
}
else
{
    <table class="table">
        <thead>
            <tr>
                <th>Date</th>
                <th>Temp. (C)</th>
                <th>Temp. (F)</th>
                <th>Summary</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var forecast in forecasts)
            {
                <tr>
                    <td>@forecast.Date</td>
                    <td>@forecast.TemperatureC</td>
                    <td>@forecast.TemperatureF</td>
                    <td>@forecast.Summary</td>
                </tr>
            }
        </tbody>
    </table>
}

@code {
    private IEnumerable<WeatherForecast>? forecasts;

    protected override async Task OnInitializedAsync()
    {
        try
        {
            forecasts = await Http.GetFromJsonAsync<IEnumerable<WeatherForecast>>("api/weatherforecast");
        }
        catch (Exception ex)
        {
            // 可添加错误提示逻辑,比如弹窗显示
            Console.WriteLine($"API调用失败: {ex.Message}");
        }
    }
}

四、常见问题解决

  • 引用添加失败:确认两个项目均为.NET8框架,清理并重建解决方案后重试
  • API调用失败:先检查服务端是否启动、Controller路由是否正确;若跨域(客户端与服务端端口不同),需在服务端添加CORS配置:
    在服务端Program.cs中添加:
    var builder = WebApplication.CreateBuilder(args);
    
    // 添加CORS策略
    builder.Services.AddCors(options =>
    {
        options.AddPolicy("AllowBlazorClient",
            policy => policy.WithOrigins("https://localhost:5002") // 替换为你的客户端地址
                            .AllowAnyHeader()
                            .AllowAnyMethod());
    });
    
    // ...其他服务注册
    
    var app = builder.Build();
    
    // 启用CORS,需放在UseRouting之后、UseAuthorization之前
    app.UseCors("AllowBlazorClient");
    
    // ...其他中间件配置
    

内容的提问来源于stack exchange,提问作者Prefetcher Shatnawi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:43:13