全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Blazor 创建和注入 API Service 的方法

Blazor中创建和注入API Service的核心是定义接口与实现类封装HTTP调用,通过DI注册(WebAssembly用Singleton、Server用Scoped),并在OnInitializedAsync中异步调用;需注意HttpClient配置、CORS、生命周期匹配及错误处理。

在 Blazor 中创建和注入 API Service 的核心是:定义服务类封装 HTTP 调用,通过依赖注入(DI)注册到服务容器,并在组件中按需使用。关键在于区分服务生命周期、正确处理异步、适配 Blazor Server 与 WebAssembly 的差异。

定义 API Service 类

新建一个 C# 类(如 WeatherForecastService.cs),继承 IWeatherForecastService 接口(推荐,利于测试和解耦)。内部使用 IHttpClientFactory 或直接注入 HttpClient(WebAssembly 下需注意配置)。

示例:

public interface IWeatherForecastService
{
Task GetForecastAsync(DateTime startDate);
}

public class WeatherForecastService : IWeatherForecastService
{
private readonly HttpClient _httpClient;

public WeatherForecastService(HttpClient httpClient)
{
_httpClient = httpClient;
_httpClient.BaseAddress = new Uri("https://localhost:5001/"); // WebAssembly 需确保跨域或代理
}

public async Task GetForecastAsync(DateTime startDate)
{
return await _httpClient.GetFromJsonAsync($"WeatherForecast?startDate={startDate:O}");
}
}

在 Program.cs 中注册服务

Blazor 从 .NET 6 起统一使用 Program.cs 配置 DI 容器。根据部署模型选择注册方式:

  • Blazor WebAssembly(托管或独立):注册为 Singleton,并配置 HttpClient 的基础地址和默认请求头
  • Blazor Server:通常注册为 Scoped(配合 SignalR 生命周期),也可用 Singleton

示例(WebAssembly):

builder.Services.AddHttpClient(
client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress));
// 或手动注册(更灵活)
builder.Services.AddSingleton();
builder.Services.AddScoped(sp => new HttpClient
{
BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)
});

在组件中注入并调用

使用 @inject 指令或构造函数注入。注意 Blazor 组件生命周期中,异步初始化需放在 OnInitializedAsync 中,避免在构造函数中执行异步操作。

示例(.razor 文件):

@page "/forecast"
@using MyApp.Services
@inject IWeatherForecastService ForecastService

Weather Forecast



@if (forecasts == null)
{

Loading...


}
else
{



@foreach (var forecast in forecasts)
{

}

DateTemp. (C)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.Summary

}

@code {
private WeatherForecast[]? forecasts;

protected override async Task OnInitializedAsync()
{
forecasts = await ForecastService.GetForecastAsync(DateTime.Now);
}
}

处理常见问题

实际开发中容易遇到以下情况:

  • CORS 报错(WebAssembly):后端需启用跨域,或使用 dev-server 代理proxy.conf.js 或 .NET 6+ 的 appsettings.Development.json 代理配置)
  • HttpClient 实例复用问题:不要在服务中 new HttpClient;优先用 IHttpClientFactory 或由 DI 提供的实例
  • 认证与 Token 注入:可扩展 DelegatingHandler(如 AuthorizationMessageHandler)自动附加 JWT
  • 错误统一处理:在 Service 方法内捕获 HttpRequestException,转换为业务异常或返回 Result 封装类型

基本上就这些。不复杂但容易忽略细节,比如生命周期匹配、HttpClient 配置位置、以及 WebAssembly 下的 BaseAddress 来源。保持接口抽象、合理注册、异步生命周期对齐,API 调用就能稳定工作。


# js  # json  # app  # 后端  # ai  # proxy  # nas  # 跨域  # 常见问题  # c#  # .net  # 封装  # 构造函数  # Token  # 继承  # 接口 


相关文章: 如何高效搭建专业期货交易平台网站?  如何高效利用200m空间完成建站?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  重庆市网站制作公司,重庆招聘网站哪个好?  建站主机功能解析:服务器选择与快速搭建指南  b2c电商网站制作流程,b2c水平综合的电商平台?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  再谈Python中的字符串与字符编码(推荐)  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  如何彻底卸载建站之星软件?  如何在万网自助建站中设置域名及备案?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  公众号网站制作网页,微信公众号怎么制作?  如何高效配置香港服务器实现快速建站?  山东云建站价格为何差异显著?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何挑选高效建站主机与优质域名?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  建站之星如何助力网站排名飙升?揭秘高效技巧  完全自定义免费建站平台:主题模板在线生成一站式服务  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  php json中文编码为null的解决办法  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何用AWS免费套餐快速搭建高效网站?  如何快速选择适合个人网站的云服务器配置?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  如何在IIS中新建站点并配置端口与物理路径?  公司网站制作价格怎么算,公司办个官网需要多少钱?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  如何在Tomcat中配置并部署网站项目?  中山网站制作网页,中山新生登记系统登记流程?  动图在线制作网站有哪些,滑动动图图集怎么做?  潮流网站制作头像软件下载,适合母子的网名有哪些?  北京网站制作网页,网站升级改版需要多久?  如何在Windows 2008云服务器安全搭建网站?  建站之星2.7模板快速切换与批量管理功能操作指南  如何通过WDCP绑定主域名及创建子域名站点?  制作表格网站有哪些,线上表格怎么弄?  如何通过IIS搭建网站并配置访问权限?  用v-html解决Vue.js渲染中html标签不被解析的问题  C#如何使用XPathNavigator高效查询XML  东莞专业制作网站的公司,东莞大学生网的网址是什么?  如何确保FTP站点访问权限与数据传输安全?  c# await 一个已经完成的Task会发生什么  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  北京专业网站制作设计师招聘,北京白云观官方网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。