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

.NET 8 Blazor全栈中如何从客户端项目调用服务?

.NET 8 Blazor全栈模式下InteractiveWebAssembly组件的服务访问方案

核心结论

不需要额外编写传统WebAPI控制器,.NET 8提供了更高效的**远程过程调用(RPC)**方案,能让InteractiveWebAssembly组件直接调用服务器端服务方法,替代手动编写HTTP API的繁琐流程。

具体实现方式

1. 服务器端暴露服务端点

  • 先在主项目(服务器端)注册业务服务:
    // 服务器端Program.cs
    builder.Services.AddScoped<IMyBusinessService, MyBusinessService>();
    
  • 映射RPC端点,将服务方法暴露给客户端:
    // 服务器端Program.cs
    app.MapRazorComponents<App>()
       .AddInteractiveWebAssemblyRenderMode()
       .AddAdditionalAssemblies(typeof(Client._Imports).Assembly);
    
    // 映射RPC接口,直接绑定服务方法
    app.MapPost("/business/get-data", async (IMyBusinessService service, [AsParameters] MyRequestParams request) =>
    {
        var result = await service.GetDataAsync(request);
        return Results.Ok(result);
    });
    

2. 客户端调用服务器端服务

客户端无法直接注入服务器端服务实例(运行环境完全隔离),需通过HttpClient调用RPC端点:

// 客户端组件代码
@inject HttpClient Http

private async Task FetchData()
{
    var request = new MyRequestParams { ItemId = 456 };
    var response = await Http.PostAsJsonAsync("/business/get-data", request);
    var data = await response.Content.ReadFromJsonAsync<MyDataResult>();
    // 处理返回数据
}

如果追求强类型体验,可使用Typed Client:

// 客户端Program.cs
builder.Services.AddHttpClient<IMyBusinessClient>(client =>
{
    client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress);
}).AddTypedClient<IMyBusinessClient, MyBusinessClient>();

之后在组件中注入IMyBusinessClient,直接调用方法即可,内部自动处理HTTP通信。

3. 类型一致性优化

创建共享类库项目,存放请求/响应DTO、服务接口定义,服务器端实现接口,客户端引用类库,确保两端类型统一,避免重复编码:

// 共享项目中的接口与DTO
public interface IMyBusinessService
{
    Task<MyDataResult> GetDataAsync(MyRequestParams request);
}

public class MyRequestParams { public int ItemId { get; set; } }
public class MyDataResult { public string Content { get; set; } }

关键说明

InteractiveWebAssembly组件运行在浏览器的Wasm环境,服务器端服务运行在后端,两者属于不同进程,无法直接跨进程注入服务实例,必须通过HTTP/RPC这类跨进程通信方式实现交互。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:10:03