ABP-VNEXT 學習筆記(四)自動API 控制器

官方文檔地址:https://docs.abp.io/en/abp/latest/API/Auto-API-Controllers

 

詳細的請閱讀官方文檔,這邊側重簡化說明怎麼應用和一些注意要點。

自動API,即代碼端只需要定義服務層即可,無需每一個服務層方法都對應在控制器中編寫一個action。

這個可以大大節省我們的時間和省略大量控制器端的代碼。

該示例項目,我們建了一個ApplicationContract 接口層,一個Application 服務層,兩個web項目。

 

 

接口層如下:

我們定義了2個接口,分別是獲取姓名和年齡。

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;

namespace AbpAPI
{
    public interface IStudentService:IApplicationService
    {

        Task<string> GetNameAsync();

        Task<int> GetAgeAsync();


    }
}

 

服務層實現:

using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Services;

namespace AbpAPI
{

    public class StudentService : ApplicationService, IStudentService
    {


        [RemoteService(IsEnabled =false)]  //該設置表示該方法不自動生成api,但不影響直接調用。
        public async Task<int> GetAgeAsync()
        {
            return await Task.FromResult(18);
        }

        public async Task<string> GetNameAsync()
        {
            return await Task.FromResult("李四");
        }
    }
}

 

下面是web層的注入:

using Microsoft.OpenApi.Models;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
using Volo.Abp.Swashbuckle;

namespace AbpAPI.Web
{
    [DependsOn(typeof(AbpAPIApplicationModule))]
    [DependsOn(typeof(AbpAspNetCoreMvcModule))]
    [DependsOn(typeof(AbpSwashbuckleModule))]
    [DependsOn(typeof(AbpAutofacModule))]
    public class AbpAPIWebModule : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            base.ConfigureServices(context);
            //注入自動API
            Configure<AbpAspNetCoreMvcOptions>(options =>
            {
                options
                    .ConventionalControllers
                    .Create(typeof(AbpAPIApplicationModule).Assembly);  //設置哪個類庫要自動API,可配置多個服務實現層
            });

            //下面是自動生成swaggerUI
            var services = context.Services;
            services.AddAbpSwaggerGen(options =>
        {
            options.SwaggerDoc("v1", new OpenApiInfo { Title = "動態API", Version = "v1" });
            options.DocInclusionPredicate((docName, description) => true);
            options.CustomSchemaIds(type => type.FullName);

        }
    );

        }

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

            //應用swaggerUI
            app.UseSwagger();
            app.UseAbpSwaggerUI(options =>
            {
                options.SwaggerEndpoint("/swagger/v1/swagger.json", "動態API");
            });

            base.OnApplicationInitialization(context);
        }
    }
}

 

這裏面做了2個配置

若單單配置自動API,只需要

  //注入自動API
            Configure<AbpAspNetCoreMvcOptions>(options =>
            {
                options
                    .ConventionalControllers
                    .Create(typeof(AbpAPIApplicationModule).Assembly);  //設置哪個類庫要自動API,可配置多個服務實現層
            });

 

配置swaggerUI是方便我們查看api內容和模擬請求。

這樣,就完成了自動API的配置。

有個點需要注意看官方文檔的, 就是關於請求方式和url路徑。官方文檔做了詳細說明。在路徑默認固定以 /api/app/開頭,方法名中的Get和async,service都會被清掉。

比如StudentService下的GetName方法,最終請求的url是 /api/app/student/name

下面我們運行起來,看swagger

 

 

可以看到,這時候只有getname方法是有生成API,GetAge是沒有的。

 

至此,自動生成API的應用就這麼簡單。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章