ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-08-25 18:30:50  阅读:187  来源: 互联网

标签: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


 

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有