[ABP框架]动态web Api的拦截用法。

先进行配置

首先这种需求,一般发生在APP端,我们给APP,不会给所有项目系统的接口给他们用。我们系统有200个接口,但是APP的需求只会用20个。那么这个需求也就应运而生了。

[ABP框架]动态web Api的拦截用法。_第1张图片
项目结构.png

以上为API文件夹中为项目接口,没有啥特别复杂的东西存在。

首先创建好,一个网站项目,进行模块的配置。
首先引入以下的nuget包:
以下是WebApp项目中的packages.config



  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

新建一个'AbpProjectTemplateWebAppModule.cs' 的类文件:

  [DependsOn(
        typeof(AbpWebMvcModule),
        typeof(AbpZeroOwinModule),
        typeof(AbpProjectTemplateDataModule),
           typeof(AbpProjectTemplateWebAppApiModule),

        typeof(AbpProjectTemplateApplicationModule)

    )]
    public class AbpProjectTemplateWebAppModule : AbpModule
    {
        public override void PreInitialize()
        {
           
        }
        public override void Initialize()
        {
            //进行以来注入
            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());

            IocManager.IocContainer.Register(
                Component
                    .For()
                    .UsingFactoryMethod(() => HttpContext.Current.GetOwinContext().Authentication)
                    .LifestyleTransient()
            );
            //Areas
            AreaRegistration.RegisterAllAreas();

            //Routes
            RouteConfig.RegisterRoutes(RouteTable.Routes);

            //Bundling
            BundleTable.Bundles.IgnoreList.Clear();
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
 
    }

对Global.asax文件进行修改,修改后:

    public class WebApiApplication : AbpWebApplication
    {
        protected override void Application_Start(object sender, EventArgs e)
        {
            //Use UTC clock. Remove this to use local time for your application.
             
            //Log4Net configuration
            AbpBootstrapper.IocManager.IocContainer
                .AddFacility(f => f.UseAbpLog4Net()
                    .WithConfig("log4net.config")
                );

            base.Application_Start(sender, e);
        }

       
    }

不要尝试在webapp中,直接引入abp.webapi。我失败了两次,但是之前的0.97版本又是可以的。。

然后创建一个webappapi的类库:
引入如下的nuge包
这个是webAppApi项目中的package.config:



  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  


然后下面就是创建一个"AbpProjectTemplateWebAppApiModule.cs"

 /// 
    /// 在系统中进行WebApi的配置
    /// 
    [DependsOn(typeof(AbpWebApiModule), typeof(AbpProjectTemplateApplicationModule))]
    public class AbpProjectTemplateWebAppApiModule : AbpModule
    {
       
        public override void Initialize()
        {
            IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());           
            Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder
                .ForAll(typeof(AbpProjectTemplateApplicationModule).Assembly, "app")
                .Build();
            Configuration.Modules.AbpWebApi().HttpConfiguration.Filters.Add(new HostAuthenticationFilter("Bearer"));      
        }        
    }

然后就是配置EnableSwaggerUi了。这里的教程,请去看:ABP教程-给项目添加SwaggerUI,生成动态webapi

跑起来了后的截图:

[ABP框架]动态web Api的拦截用法。_第2张图片
API截图

接口太多了。那么我们就来折腾下
首先在application层创建一个

  /// 
    /// 使用该特性进行app过滤
    ///  
    /// 
    public class WebAppApiAttribute:System.Attribute
    {
        
    }

对AbpProjectTemplateWebAppApiModule中的配置方法进行改造下

Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder
    .ForAll(Assembly.GetExecutingAssembly(), "app")
    .ForMethods(builder =>
    {
           if (!a.Method.IsDefined(typeof(WebAppApiAttribute)))
                        {
                            a.DontCreate = true;
                        }
    })
    .Build();

然后在特定的 方法上打上标记。

 public interface ICachingAppService : IApplicationService
    {
        [WebAppApi]
        ListResultDto GetAllCaches();

        Task ClearCache(EntityDto input);
        [WebAppApi]
        Task ClearAllCaches();
    }

然后我们运行项目,看到如下结果:

[ABP框架]动态web Api的拦截用法。_第3张图片
编译后的结果

更多的玩法,请参考官方文档:
Dynamic Web API Layer

https://aspnetboilerplate.com/Pages/Documents/v1.5.2/Dynamic-Web-API

你可能感兴趣的:([ABP框架]动态web Api的拦截用法。)