[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控制器 ...
随机推荐
- Kafka学习-复制
复制 Kafka可以通过可配置的服务器数量复制每个主题分区的日志(可以为每个主题设置复制因子).这允许在集群中的服务器发生故障时自动故障转移到其他副本,因此在存在故障的情况下,消息仍然可用. 其他消息 ...
- jdk动态代理原理
http://www.cnblogs.com/MOBIN/p/5597215.html 请先查看这边博文 此文主要是在上篇博文的基础之上,宏观的理一下思路,因为之前本人看了上篇之后云里雾里(是本人 ...
- Spring——Web应用中的IoC容器创建(WebApplicationContext根应用上下文的创建过程)
基于Spring-4.3.7.RELEASE Spring的配置不仅仅局限在XML文件,同样也可以使用Java代码来配置.在这里我使用XML配置文件的方式来粗略地讲讲WebApplicationCon ...
- php高性能开发阅读笔记
1.http请求与响应的简单流程 上图简单的描述了一个http请求与响应的过程,首先是用户请求过程,这是该生命周期的第一部分,用户发起请求,经过路由器与ips网关和dns服务器(域名服务器),通过we ...
- 【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】
一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...
- 刨根究底字符编码之四——EASCII及ISO 8859字符编码方案
EASCII及ISO 8859字符编码方案 1. 计算机出现之后,从美国发展到欧洲,由于欧洲很多国家中所用到的字符中,除了基本的美国也用的那128个ASCII字符之外,还有很多衍生的拉丁字母等字符 ...
- 1.Java 加解密技术系列之 BASE64
Java 加解密技术系列之 BASE64 序号 背景 正文 总结 序 这段时间,工作中 用到了 Java 的加解密技术,本着学习的态度,打算从这篇文章开始,详细的研究一番 Java 在加解密技术上有什 ...
- js的addEvertLIstener方法
简介 “DOM2级事件”定义了两个方法,用于处理指定和删除事件处理程序的操作:addEventListener() 和 removeEventListener(). public override f ...
- DDD理论学习系列(4)-- 领域模型
DDD理论学习系列目录 1.引言 我们还是先来拆词理解,领域模型可以拆为"领域"和"模型"二词. 领域:按照我们之前的文章的理解,DDD中的领域是指软件系统要解 ...
- nfs+rsync+inotify实现文件的实时同步
准备三台服务器进行测试: nfs_server:192.168.12.110 web_server:192.168.12.111 rsync_server:192.168.12.112 网络规划图: ...