先进行配置
首先这种需求,一般发生在APP端,我们给APP,不会给所有项目系统的接口给他们用。我们系统有200个接口,但是APP的需求只会用20个。那么这个需求也就应运而生了。
以上为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
跑起来了后的截图:
接口太多了。那么我们就来折腾下
首先在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();
}
然后我们运行项目,看到如下结果:
更多的玩法,请参考官方文档:
Dynamic Web API Layer
https://aspnetboilerplate.com/Pages/Documents/v1.5.2/Dynamic-Web-API