首页 > 其他分享 >ABP-VNEXT 学习笔记(五)动态API客户端

ABP-VNEXT 学习笔记(五)动态API客户端

时间:2022-08-25 18:33:24浏览次数:88  
标签:VNEXT Abp Volo ABP API typeof context using public

本篇内容需要结合上一篇  https://www.cnblogs.com/fei686868/p/16625289.html

官方地址:https://docs.abp.io/zh-Hans/abp/latest/API/Dynamic-CSharp-API-Clients

在上一篇中,我们讲到了自动生成api

本篇内容,讲述如何动态生成API客户端,简单的说,就是通过http请求获取数据。但此处,我们是依赖接口层实现,并非自己一个个写http请求。

该功能适用于 微服务场景下。

 

我们再web2项目中,只引入接口层 AbpAPI.ApplicationContract。 这个是跟上一篇中web1需要引入 实现层不一样的。

需要引入:Volo.Abp.Http.Client   这个包

using AbpAPI;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Autofac;
using Volo.Abp.Http.Client;
using Volo.Abp.Modularity;

namespace AbpAPIWeb2
{
    [DependsOn(typeof(AbpAPIApplicationContractModule))]  //注意,此处引入的是接口层
    [DependsOn(typeof(AbpAspNetCoreMvcModule))]
    [DependsOn(typeof(AbpAutofacModule))]
    [DependsOn(typeof(AbpHttpClientModule))] //添加依赖
    public class AbpAPIWeb2Module : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            base.ConfigureServices(context);

            //创建动态客户端代理,就这么一句户搞定
            context.Services.AddHttpClientProxies(
                typeof(AbpAPIApplicationContractModule).Assembly
            );

        }

        public override void OnApplicationInitialization(ApplicationInitializationContext context)
        {
            
            var app = context.GetApplicationBuilder();
        
            base.OnApplicationInitialization(context);
        }
    }
}

就上面代码中一句户搞定:

  //创建动态客户端代理,就这么一句户搞定
            context.Services.AddHttpClientProxies(
                typeof(AbpAPIApplicationContractModule).Assembly
            );

多个接口层,就写多个

应用上,跟我们日常调用接口方法,没啥区别,中间的http请求过程,abp都处理了

如:

        public IStudentService studentService { get; set; }


        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        {
            return View();
        }
        public async Task<string> GetName()
        {
            string name = await studentService.GetNameAsync();

            return name;
        }

 

这样就实现了api的调用。

这里面有个注意点需要特别说明一下,经过测试发现:
方法必须是异步的,如果同步的方法,则此处方法调取后,返回的都是null,至于为什么,需要去研究abp源码了。

 

 

为什么需要引入接口层,而不是直接写http请求呢,其实大多数微服务框架也是这么操作的。

引入共同的接口层

1:为了约束,做好契约。使代码更规范更容易维护。

2:简洁。在使用时直接调用对方方法,无需配置一大堆的url

 

附上示例代码:https://gitee.com/fei686868/abpapisample/tree/master/AbpAPISolution

 

标签:VNEXT,Abp,Volo,ABP,API,typeof,context,using,public
From: https://www.cnblogs.com/fei686868/p/16625329.html

相关文章

  • 好用的人像比对API推荐
    好用的人像比对API推荐给大家,支持将用户的人脸照片以及身份证基本信息与权威数据对比,获得身份证号、姓名以及人脸的三者匹配结果,快速完成用户身份核验,确保为本人且证件......
  • ABP-VNEXT 学习笔记(四)自动API 控制器
    官方文档地址:https://docs.abp.io/en/abp/latest/API/Auto-API-Controllers 详细的请阅读官方文档,这边侧重简化说明怎么应用和一些注意要点。自动API,即代码端只需要定......
  • 热门好用的IP归属地API
    今天给大家推荐一个IP归属地API,非常热门好用,它是IP地址定位数据库的在线调用接口,包含43亿全量IPv4,支持到中国地区(不含港台地区)区县级别,含运营商数据。 IP查询可以应用......
  • 热门好用的手机号码归属地API
    今天给大家分享一款APISpace热门好用的API——手机号码归属地API,可根据手机号码查询其省市区、运营商区号行政区划代码等信息。上亿条数据囊括最新的170、166、147等号......
  • 微信公众平台开发 - 接入公众号(.NetCore+WebApi)
    1.使用WebApi来配置公众号服务器地址,get用于签名,post用于接口,需要注意路由的定义  namespaceTzj.WeiXinSite.Controllers.Api{[Route("api/[controller]")]......
  • APL概述和使用步骤和Scanner概述及其API文档的使用
    APL概述和使用步骤 概述:API(ApplicationProgrammingInterface),应用程序编程接口。JavaAPl是一本程序员的字典,JDK中提供给我们使用的类的说明文档。这些类将底层的代......
  • 【原创】只用Asp.NET Core Web API与Vue 3.0搭建前后分离项目
    特地记录一下,网上的教程写的稀里糊涂的,整得我都心塞塞的,其实实现的过程蛮简单的问题是这样的:我将Vue构建生成好的文件,放在后端wwwroot文件里面,并开启静态文件访问功能,结果......
  • restfulAPI接口规范/django rest_Framework_环境
    一.RESTFUlAPI设计1).域名应该将api部署在专用域名下https://www.baidu.com/api/2).版本应该将API版本号放到路径中https://www.baidu.com/api/1.0/loginhttps:......
  • API基础正则表达式8月23日
    API基础第二天:回顾:String:Strings=newString("hello");String常用方法:length():获取长度trim():去掉两边空白toUpperCase()和toLowerCase():转大写/转小写st......
  • API集合8月24日
    集合第一天:回顾:正则表达式:用于描述字符串内容格式,匹配字符串是否符合格式要求String支持正则表达式的方法:matches():匹配replaceAll():替换split():拆分Obj......