第三方API客户端代理
启动模板中包含HttpApi.Client
项目,这个项目是应用程序自己的客户端代理,用于提供给其他应用访问。例如Blazor WebAssembly使用HttpApi.Client
项目生成的API客户端代理访问应用程序的服务。
本文介绍在应用程序中如何访问其他应用的API。
远程应用服务接口
新建.Application.Contracts.Client
项目。此项目包含远程应用服务的interface。
添加以下两个NuGet包:
Install-Package Volo.Abp.Ddd.Application.Contracts
Install-Package Refit.HttpClientFactory
添加模块类<ProjectName>ApplicationContractsClientModule
:
using Volo.Abp.Application;
using Volo.Abp.Modularity;
namespace LearnAbp;
[DependsOn(
typeof(AbpDddApplicationContractsModule)
)]
public class LearnAbpApplicationContractsClientModule : AbpModule
{
}
添加Services
文件夹,在其中定义远程应用服务interface。例如:
using Refit;
namespace LearnAbp.Application.Contracts.Client.Services
{
public interface IMesApiService
{
[Get("/autoPas/Report")]
Task SendReportMessageAsync(string text);
}
}
-
[Get("/autoPas/Report")]
是Refit中的特性,表示向/autoPas/Report
端点发起一个GET请求。
然后在.Application.Contracts
项目中引用.Application.Contracts.Client
项目,并在其模块类中添加对<ProjectName>ApplicationContractsClientModule
的依赖:
[DependsOn(
typeof(LearnAbpDomainSharedModule),
typeof(LearnAbpApplicationContractsClientModule),
...
)]
public class LearnAbpApplicationContractsModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
LearnAbpDtoExtensions.Configure();
}
}
远程应用服务代理
新建.Application.Client
项目,此项目使用Refit动态生成远程应用服务代理。
在.Application.Client
项目引用.Application.Contracts.Client
项目,添加以下两个NuGet包:
Install-Package Volo.Abp.Http.Client
Install-Package Refit.HttpClientFactory
添加模块类<ProjectName>ApplicationClientModule
:
using LearnAbp.Application.Contracts.Client.Services;
using Microsoft.Extensions.DependencyInjection;
using Refit;
using Volo.Abp.Modularity;
namespace LearnAbp;
[DependsOn(
typeof(LearnAbpApplicationContractsClientModule)
)]
public class LearnAbpApplicationClientModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
ConfigureRefit(context);
}
private static void ConfigureRefit(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
context.Services.AddRefitClient<IMesApiService>()
.ConfigureHttpClient(httpClient =>
{
if (configuration["RemoteServices:Default:BaseUrl"] is string url)
{
httpClient.BaseAddress = new Uri(url);
}
});
}
}
然后在.Application
项目中引用.Application.Client
项目,并在其模块类中添加对<ProjectName>ApplicationClientModule
的依赖,例如:
[DependsOn(
typeof(LearnAbpDomainModule),
typeof(LearnAbpApplicationContractsModule),
typeof(LearnAbpApplicationClientModule),
...
)]
public class LearnAbpApplicationModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
...
}
}
端点配置
appsettings.json
中的RemoteServices
节被用于获取默认远程服务地址。简单的配置如下:
{
"RemoteServices": {
"Default": {
"BaseUrl": "http://localhost:53929/"
}
}
}
使用
使用只需注入远程应用服务interface。
public class MyService : ITransientDependency
{
private readonly IMesApiService _mesApi;
public MyService(IMesApiService mesApi)
{
_mesApi = mesApi;
}
public async Task DoIt()
{
await _mesApi.SendReportMessageAsync("ok");
}
}
标签:API,Contracts,ABP,Application,Client,typeof,using,public,客户端
From: https://www.cnblogs.com/yada/p/18663453