[ABP框架]动态web Api的拦截用法。
先进行配置
首先这种需求,一般发生在APP端,我们给APP,不会给所有项目系统的接口给他们用。我们系统有200个接口,但是APP的需求只会用20个。那么这个需求也就应运而生了。

以上为API文件夹中为项目接口,没有啥特别复杂的东西存在。
首先创建好,一个网站项目,进行模块的配置。
首先引入以下的nuget包:
以下是WebApp项目中的packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Abp" version="1.5.1" targetFramework="net452" />
<package id="Abp.Castle.Log4Net" version="1.5.1" targetFramework="net452" />
<package id="Abp.EntityFramework" version="1.5.1" targetFramework="net452" />
<package id="Abp.EntityFramework.Common" version="1.5.1" targetFramework="net452" />
<package id="Abp.Owin" version="1.5.1" targetFramework="net452" />
<package id="Abp.Web" version="1.5.1" targetFramework="net452" />
<package id="Abp.Web.Api" version="1.5.1" targetFramework="net452" />
<package id="Abp.Web.Common" version="1.5.1" targetFramework="net452" />
<package id="Abp.Web.Mvc" version="1.5.1" targetFramework="net452" />
<package id="Abp.Web.Resources" version="1.5.2" targetFramework="net452" />
<package id="Abp.Zero" version="1.5.1" targetFramework="net452" />
<package id="Abp.Zero.EntityFramework" version="1.5.1" targetFramework="net452" />
<package id="Abp.Zero.Owin" version="1.5.1" targetFramework="net452" />
<package id="Antlr" version="3.5.0.2" targetFramework="net452" />
<package id="bootstrap" version="3.0.0" targetFramework="net452" />
<package id="Castle.Core" version="3.3.3" targetFramework="net452" />
<package id="Castle.LoggingFacility" version="3.4.0" targetFramework="net452" />
<package id="Castle.Windsor" version="3.4.0" targetFramework="net452" />
<package id="EntityFramework" version="6.1.3" targetFramework="net452" />
<package id="EntityFramework.DynamicFilters" version="1.4.11" targetFramework="net452" />
<package id="JetBrains.Annotations" version="10.4.0" targetFramework="net452" />
<package id="jQuery" version="1.6.4" targetFramework="net452" />
<package id="log4net" version="2.0.8" targetFramework="net452" />
<package id="Microsoft.AspNet.Identity.Core" version="2.2.1" targetFramework="net452" />
<package id="Microsoft.AspNet.Identity.Owin" version="2.2.1" targetFramework="net452" />
<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.Mvc.zh-Hans" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.Razor.zh-Hans" version="3.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net452" />
<package id="Microsoft.AspNet.Web.Optimization.zh-Hans" version="1.1.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Client.zh-Hans" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Core.zh-Hans" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.HelpPage" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.WebHost.zh-Hans" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebPages.zh-Hans" version="3.2.3" targetFramework="net452" />
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net452" />
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net452" />
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net452" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.3" targetFramework="net452" />
<package id="Microsoft.Net.Compilers" version="1.3.2" targetFramework="net452" developmentDependency="true" />
<package id="Microsoft.Owin" version="3.1.0" targetFramework="net452" />
<package id="Microsoft.Owin.FileSystems" version="3.0.1" targetFramework="net452" />
<package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net452" />
<package id="Microsoft.Owin.Security" version="3.1.0" targetFramework="net452" />
<package id="Microsoft.Owin.Security.Cookies" version="3.0.1" targetFramework="net452" />
<package id="Microsoft.Owin.Security.OAuth" version="3.0.1" targetFramework="net452" />
<package id="Microsoft.Owin.StaticFiles" version="3.0.1" targetFramework="net452" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net452" />
<package id="Modernizr" version="2.8.3" targetFramework="net452" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net452" />
<package id="Nito.AsyncEx" version="4.0.1" targetFramework="net452" />
<package id="Owin" version="1.0" targetFramework="net452" />
<package id="Respond" version="1.2.0" targetFramework="net452" />
<package id="Swashbuckle.Core" version="5.5.3" targetFramework="net461" />
<package id="System.Collections.Immutable" version="1.3.1" targetFramework="net452" />
<package id="System.Linq.Dynamic" version="1.0.7" targetFramework="net452" />
<package id="WebGrease" version="1.6.0" targetFramework="net452" />
</packages>
新建一个'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<IAuthenticationManager>()
.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<AbpProjectTemplateWebAppModule>
{
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<LoggingFacility>(f => f.UseAbpLog4Net()
.WithConfig("log4net.config")
);
base.Application_Start(sender, e);
}
}
不要尝试在webapp中,直接引入abp.webapi。我失败了两次,但是之前的0.97版本又是可以的。。
然后创建一个webappapi的类库:
引入如下的nuge包
这个是webAppApi项目中的package.config:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Abp" version="1.5.1" targetFramework="net452" />
<package id="Abp.AutoMapper" version="1.5.1" targetFramework="net452" />
<package id="Abp.Web" version="1.5.1" targetFramework="net452" />
<package id="Abp.Web.Api" version="1.5.1" targetFramework="net452" />
<package id="Abp.Web.Common" version="1.5.1" targetFramework="net452" />
<package id="Abp.Zero" version="1.5.1" targetFramework="net452" />
<package id="Abp.Zero.Owin" version="1.5.1" targetFramework="net452" />
<package id="AutoMapper" version="5.2.0" targetFramework="net452" />
<package id="Castle.Core" version="3.3.3" targetFramework="net461" />
<package id="Castle.LoggingFacility" version="3.4.0" targetFramework="net452" />
<package id="Castle.Windsor" version="3.4.0" targetFramework="net452" />
<package id="JetBrains.Annotations" version="10.4.0" targetFramework="net452" />
<package id="Microsoft.AspNet.Identity.Core" version="2.2.1" targetFramework="net452" />
<package id="Microsoft.AspNet.Identity.Owin" version="2.2.1" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net452" />
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net452" />
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net452" />
<package id="Microsoft.Owin" version="3.1.0" targetFramework="net461" />
<package id="Microsoft.Owin.Security" version="3.1.0" targetFramework="net461" />
<package id="Microsoft.Owin.Security.Cookies" version="3.0.1" targetFramework="net461" />
<package id="Microsoft.Owin.Security.OAuth" version="3.0.1" targetFramework="net461" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net452" />
<package id="Nito.AsyncEx" version="4.0.1" targetFramework="net452" />
<package id="Owin" version="1.0" targetFramework="net452" />
<package id="Swashbuckle.Core" version="5.5.3" targetFramework="net452" />
<package id="System.Collections.Immutable" version="1.3.1" targetFramework="net452" />
<package id="System.Linq.Dynamic" version="1.0.7" targetFramework="net452" />
</packages>
然后下面就是创建一个"AbpProjectTemplateWebAppApiModule.cs"
/// <summary>
/// 在系统中进行WebApi的配置
/// </summary>
[DependsOn(typeof(AbpWebApiModule), typeof(AbpProjectTemplateApplicationModule))]
public class AbpProjectTemplateWebAppApiModule : AbpModule
{
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder
.ForAll<IApplicationService>(typeof(AbpProjectTemplateApplicationModule).Assembly, "app")
.Build();
Configuration.Modules.AbpWebApi().HttpConfiguration.Filters.Add(new HostAuthenticationFilter("Bearer"));
}
}
然后就是配置EnableSwaggerUi了。这里的教程,请去看:ABP教程-给项目添加SwaggerUI,生成动态webapi
跑起来了后的截图:

接口太多了。那么我们就来折腾下
首先在application层创建一个
/// <summary>
/// 使用该特性进行app过滤
///
/// </summary>
public class WebAppApiAttribute:System.Attribute
{
}
对AbpProjectTemplateWebAppApiModule中的配置方法进行改造下
Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder
.ForAll<IApplicationService>(Assembly.GetExecutingAssembly(), "app")
.ForMethods(builder =>
{
if (!a.Method.IsDefined(typeof(WebAppApiAttribute)))
{
a.DontCreate = true;
}
})
.Build();
然后在特定的 方法上打上标记。
public interface ICachingAppService : IApplicationService
{
[WebAppApi]
ListResultDto<CacheDto> GetAllCaches();
Task ClearCache(EntityDto<string> input);
[WebAppApi]
Task ClearAllCaches();
}
然后我们运行项目,看到如下结果:

更多的玩法,请参考官方文档:
Dynamic Web API Layer
https://aspnetboilerplate.com/Pages/Documents/v1.5.2/Dynamic-Web-API
[ABP框架]动态web Api的拦截用法。的更多相关文章
- ABP框架 - 动态Web Api层
文档目录 本节内容: 创建动态Web Api控制器 ForAll 方法 重写 ForAll ForMethods Http 动词 WithVerb 方法 HTTP 特性 命名约定 Api 浏览器 Re ...
- DDD开发框架ABP之动态Web API层
建立动态Web API 控制器 ASP.NET Boilerplate 能够自动为您的应用层产生Web API层.比如说我们有如下的一个应用服务: public interface ITaskAppS ...
- 【asp.net core】实现动态 Web API
序言: 远程工作已经一个月了,最近也算是比较闲,每天早上起床打个卡,快速弄完当天要做的工作之后就快乐摸鱼去了.之前在用 ABP 框架(旧版)的时候就觉得应用服务层写起来真的爽,为什么实现了个 IApp ...
- 基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
我前面几篇随笔介绍了关于几篇关于SqlSugar的基础封装,已经可以直接应用在Winform项目开发上,并且基础接口也通过了单元测试,同时测试通过了一些Winform功能页面:本篇随笔继续深化应用开发 ...
- ABP文档 - Web Api 控制器
文档目录 本节内容: 简介 AbpApiController 基类 本地化 其它 过滤 审计日志 授权 防伪造过滤 工作单元 结果包装和异常处理 结果缓存 验证 模块绑定器 简介 通过Abp.Web. ...
- 动态Web API层
返回总目录 本篇目录 构建动态Web API控制器 ForAll 方法 重写ForAll 方法 Http动词 动态Javascript代理 Ajax参数 单一服务脚本 Angular支持 Durand ...
- ASP。NET Core Blazor CRUD使用实体框架和Web API
下载source code - 1.7 MB 介绍 *请查看我的Youtube视频链接来学习ASP.NET Core Blazor CRUD使用实体框架和Web API. 在本文中,我们将了解如何为A ...
- 手工搭建ABP框架(1) - Web项目
为了防止不提供原网址的转载,特在这里加上原文链接: http://www.cnblogs.com/skabyy/p/7295533.html ABP是 ASP.NET Boilerplate Proj ...
- ABP理论学习之Web API控制器(新增)
返回总目录 本篇目录 介绍 AbpApiController基类 本地化 审计日志 授权 工作单元 其他 介绍 ABP通过Abp.Web.ApiNuget包集成了 ASP.NET Web API控制器 ...
随机推荐
- hdu2717Catch That Cow 简单BFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2717 刚开始思路错了,用的DP,一直WA,后来才发现是搜索,还是简单的BFS,顿时.... 思路: B ...
- Phaser类详解
Phaser允许并发多阶段任务.Phaser类机制是在每一步结束的位置对线程进行同步,当所有的线程都完成了这一步,才允许执行下一步. 一个Phaser对象有两种状态: 活跃态(Active):当存在参 ...
- OOP 三大特点:继承性,封装性,多态性
1.继承性:代码重用 2.封装性: 使相似数据和操作进行封装,保持代码安全 3.多态性: PHP不支持多态
- window 远程在Linux(centOS7.0)上安装JDK以及配置环境变量
本人是在windows 7 上安装了虚拟机,虚拟机安装的是linux(centOS7.0)系统现在在Windows 上安装SecureCRT 远程虚拟机的linux系统,安装JDK以及配置环境变量. ...
- VBS
1.msgbox脚本显示回车 语法:msgbox"123"&vbcrlf&"456"
- Nodejs进阶:核心模块Buffer常用API使用总结
本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 模块概览 Buffer是node的核心模块,开发者可以利用它来处 ...
- 项目管理之 SVN 管理软件 CornerStone for Mac
常用的项目管理有 Git 和 SVN.之前公司一直使用的是 Git,使用的是 SourceTree 客户端,据说 Git 比 SVN 要好,只能说各有特点吧,有兴趣的可以查看下两个的区别. 下面是学习 ...
- css的定位,relative/absolute/fixed的用法
其实position的值有四个,static/relative/absolute/fixed,而static是默认值,不算具有有定位属性,这里就不讲了. 定位其实就是跟元素设置定位属性,然后设置其对位 ...
- MAVEN总结,整合Eclipse以及配置私服
对maven的理解 我们知道maven是一个项目管理工具,其核 心特点就是通过maven可以进行jar包的依赖管理,保证jar包版本的一致性,以及可以使多个项目共享jar包,从而能够 在开发大型jav ...
- jquery中的$(document).ready()使用小结
本篇文章主要是对jquery中的$(document).ready()使用方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 window.onload = function(){ ...