ABP-VNext 用户权限管理系统实战03---动态api调用并传递token
一、使用动态api的目的
ABP可以自动创建C# API 客户端代理来调用远程HTTP服务(REST APIS).通过这种方式,你不需要通过 HttpClient
或者其他低级的HTTP功能调用远程服务并获取数据.
现在有两个服务:BackgroundJob服务要调用IdentityManagement服务,并在调用时传递token
二、集成步骤
1、创建可调用的动态api
在Bridge.IdentityManagement.Application模块中有类UserService
有方法GetInfo()
在IdentityServiceHostModule配置中增加配置
Configure<AbpAspNetCoreMvcOptions>(options => { options.ConventionalControllers.Create(typeof(IdentityManagementApplicationModule).Assembly, option => { option.TypePredicate = type => { return true; }; }); });
2、BackgroundJobApplicationModule客户端调用
在调用之前要进行配置
第一步:在BackgroundJobHttpApiClientModule注入程序集IdentityManagementApplicationContractsModule
第二步:在Bridge.BackgroundJobService.Host中配置调用的远程ip
第三步:在BackgroundJobHttpApiModule中依赖BackgroundJobHttpApiClientModule模块
最后在BackgroundJobApplicationModule模块HttpClientTest类中调用
三、传递token
现在服务和服务之前可以像类中方法中一样调用了,但是在GetInfo方法中获取不到token,现在需要将在访问Test方法时获取到的token进行传递
查看是不是获取到了token只需要看看当前用户也是就是变量CurrentUser有值。
1、BackgroundJob服务中解析token并获取当前用户的值
第一步:修改BackgroundJob配置文件,确定当前api的名称
第二步:在auth服务中增加scope
项目之前在请求token时写死了Scope现在注掉
到此,访问BackgroundJob服务的api应该可以拿到当前用户数据了。
但是,如果你通过动态api,从BackgroundJob服务去访问其它服务还是拿不到token
此时我们需要在BackgroundJobServiceHostModule服务中依赖两个模块:
Volo.Abp.Http.Client.IdentityModel.dll
Volo.Abp.Http.Client.IdentityModel.Web.dll