先进行配置

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

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

首先创建好,一个网站项目,进行模块的配置。

首先引入以下的nuget包:

以下是WebApp项目中的packages.config

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <packages>
  3. <package id="Abp" version="1.5.1" targetFramework="net452" />
  4. <package id="Abp.Castle.Log4Net" version="1.5.1" targetFramework="net452" />
  5. <package id="Abp.EntityFramework" version="1.5.1" targetFramework="net452" />
  6. <package id="Abp.EntityFramework.Common" version="1.5.1" targetFramework="net452" />
  7. <package id="Abp.Owin" version="1.5.1" targetFramework="net452" />
  8. <package id="Abp.Web" version="1.5.1" targetFramework="net452" />
  9. <package id="Abp.Web.Api" version="1.5.1" targetFramework="net452" />
  10. <package id="Abp.Web.Common" version="1.5.1" targetFramework="net452" />
  11. <package id="Abp.Web.Mvc" version="1.5.1" targetFramework="net452" />
  12. <package id="Abp.Web.Resources" version="1.5.2" targetFramework="net452" />
  13. <package id="Abp.Zero" version="1.5.1" targetFramework="net452" />
  14. <package id="Abp.Zero.EntityFramework" version="1.5.1" targetFramework="net452" />
  15. <package id="Abp.Zero.Owin" version="1.5.1" targetFramework="net452" />
  16. <package id="Antlr" version="3.5.0.2" targetFramework="net452" />
  17. <package id="bootstrap" version="3.0.0" targetFramework="net452" />
  18. <package id="Castle.Core" version="3.3.3" targetFramework="net452" />
  19. <package id="Castle.LoggingFacility" version="3.4.0" targetFramework="net452" />
  20. <package id="Castle.Windsor" version="3.4.0" targetFramework="net452" />
  21. <package id="EntityFramework" version="6.1.3" targetFramework="net452" />
  22. <package id="EntityFramework.DynamicFilters" version="1.4.11" targetFramework="net452" />
  23. <package id="JetBrains.Annotations" version="10.4.0" targetFramework="net452" />
  24. <package id="jQuery" version="1.6.4" targetFramework="net452" />
  25. <package id="log4net" version="2.0.8" targetFramework="net452" />
  26. <package id="Microsoft.AspNet.Identity.Core" version="2.2.1" targetFramework="net452" />
  27. <package id="Microsoft.AspNet.Identity.Owin" version="2.2.1" targetFramework="net452" />
  28. <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net452" />
  29. <package id="Microsoft.AspNet.Mvc.zh-Hans" version="5.2.3" targetFramework="net452" />
  30. <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net452" />
  31. <package id="Microsoft.AspNet.Razor.zh-Hans" version="3.2.3" targetFramework="net452" />
  32. <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net452" />
  33. <package id="Microsoft.AspNet.Web.Optimization.zh-Hans" version="1.1.3" targetFramework="net452" />
  34. <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net452" />
  35. <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" />
  36. <package id="Microsoft.AspNet.WebApi.Client.zh-Hans" version="5.2.3" targetFramework="net452" />
  37. <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
  38. <package id="Microsoft.AspNet.WebApi.Core.zh-Hans" version="5.2.3" targetFramework="net452" />
  39. <package id="Microsoft.AspNet.WebApi.HelpPage" version="5.2.3" targetFramework="net452" />
  40. <package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net461" />
  41. <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net452" />
  42. <package id="Microsoft.AspNet.WebApi.WebHost.zh-Hans" version="5.2.3" targetFramework="net452" />
  43. <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net452" />
  44. <package id="Microsoft.AspNet.WebPages.zh-Hans" version="3.2.3" targetFramework="net452" />
  45. <package id="Microsoft.Bcl" version="1.1.10" targetFramework="net452" />
  46. <package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net452" />
  47. <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net452" />
  48. <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.3" targetFramework="net452" />
  49. <package id="Microsoft.Net.Compilers" version="1.3.2" targetFramework="net452" developmentDependency="true" />
  50. <package id="Microsoft.Owin" version="3.1.0" targetFramework="net452" />
  51. <package id="Microsoft.Owin.FileSystems" version="3.0.1" targetFramework="net452" />
  52. <package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net452" />
  53. <package id="Microsoft.Owin.Security" version="3.1.0" targetFramework="net452" />
  54. <package id="Microsoft.Owin.Security.Cookies" version="3.0.1" targetFramework="net452" />
  55. <package id="Microsoft.Owin.Security.OAuth" version="3.0.1" targetFramework="net452" />
  56. <package id="Microsoft.Owin.StaticFiles" version="3.0.1" targetFramework="net452" />
  57. <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net452" />
  58. <package id="Modernizr" version="2.8.3" targetFramework="net452" />
  59. <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net452" />
  60. <package id="Nito.AsyncEx" version="4.0.1" targetFramework="net452" />
  61. <package id="Owin" version="1.0" targetFramework="net452" />
  62. <package id="Respond" version="1.2.0" targetFramework="net452" />
  63. <package id="Swashbuckle.Core" version="5.5.3" targetFramework="net461" />
  64. <package id="System.Collections.Immutable" version="1.3.1" targetFramework="net452" />
  65. <package id="System.Linq.Dynamic" version="1.0.7" targetFramework="net452" />
  66. <package id="WebGrease" version="1.6.0" targetFramework="net452" />
  67. </packages>

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

  1. [DependsOn(
  2. typeof(AbpWebMvcModule),
  3. typeof(AbpZeroOwinModule),
  4. typeof(AbpProjectTemplateDataModule),
  5. typeof(AbpProjectTemplateWebAppApiModule),
  6. typeof(AbpProjectTemplateApplicationModule)
  7. )]
  8. public class AbpProjectTemplateWebAppModule : AbpModule
  9. {
  10. public override void PreInitialize()
  11. {
  12. }
  13. public override void Initialize()
  14. {
  15. //进行以来注入
  16. IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
  17. IocManager.IocContainer.Register(
  18. Component
  19. .For<IAuthenticationManager>()
  20. .UsingFactoryMethod(() => HttpContext.Current.GetOwinContext().Authentication)
  21. .LifestyleTransient()
  22. );
  23. //Areas
  24. AreaRegistration.RegisterAllAreas();
  25. //Routes
  26. RouteConfig.RegisterRoutes(RouteTable.Routes);
  27. //Bundling
  28. BundleTable.Bundles.IgnoreList.Clear();
  29. BundleConfig.RegisterBundles(BundleTable.Bundles);
  30. }
  31. }

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

  1. public class WebApiApplication : AbpWebApplication<AbpProjectTemplateWebAppModule>
  2. {
  3. protected override void Application_Start(object sender, EventArgs e)
  4. {
  5. //Use UTC clock. Remove this to use local time for your application.
  6. //Log4Net configuration
  7. AbpBootstrapper.IocManager.IocContainer
  8. .AddFacility<LoggingFacility>(f => f.UseAbpLog4Net()
  9. .WithConfig("log4net.config")
  10. );
  11. base.Application_Start(sender, e);
  12. }
  13. }

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

然后创建一个webappapi的类库:

引入如下的nuge包

这个是webAppApi项目中的package.config:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <packages>
  3. <package id="Abp" version="1.5.1" targetFramework="net452" />
  4. <package id="Abp.AutoMapper" version="1.5.1" targetFramework="net452" />
  5. <package id="Abp.Web" version="1.5.1" targetFramework="net452" />
  6. <package id="Abp.Web.Api" version="1.5.1" targetFramework="net452" />
  7. <package id="Abp.Web.Common" version="1.5.1" targetFramework="net452" />
  8. <package id="Abp.Zero" version="1.5.1" targetFramework="net452" />
  9. <package id="Abp.Zero.Owin" version="1.5.1" targetFramework="net452" />
  10. <package id="AutoMapper" version="5.2.0" targetFramework="net452" />
  11. <package id="Castle.Core" version="3.3.3" targetFramework="net461" />
  12. <package id="Castle.LoggingFacility" version="3.4.0" targetFramework="net452" />
  13. <package id="Castle.Windsor" version="3.4.0" targetFramework="net452" />
  14. <package id="JetBrains.Annotations" version="10.4.0" targetFramework="net452" />
  15. <package id="Microsoft.AspNet.Identity.Core" version="2.2.1" targetFramework="net452" />
  16. <package id="Microsoft.AspNet.Identity.Owin" version="2.2.1" targetFramework="net452" />
  17. <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net452" />
  18. <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" />
  19. <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
  20. <package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net452" />
  21. <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net452" />
  22. <package id="Microsoft.Bcl" version="1.1.10" targetFramework="net452" />
  23. <package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net452" />
  24. <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net452" />
  25. <package id="Microsoft.Owin" version="3.1.0" targetFramework="net461" />
  26. <package id="Microsoft.Owin.Security" version="3.1.0" targetFramework="net461" />
  27. <package id="Microsoft.Owin.Security.Cookies" version="3.0.1" targetFramework="net461" />
  28. <package id="Microsoft.Owin.Security.OAuth" version="3.0.1" targetFramework="net461" />
  29. <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net452" />
  30. <package id="Nito.AsyncEx" version="4.0.1" targetFramework="net452" />
  31. <package id="Owin" version="1.0" targetFramework="net452" />
  32. <package id="Swashbuckle.Core" version="5.5.3" targetFramework="net452" />
  33. <package id="System.Collections.Immutable" version="1.3.1" targetFramework="net452" />
  34. <package id="System.Linq.Dynamic" version="1.0.7" targetFramework="net452" />
  35. </packages>

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

  1. /// <summary>
  2. /// 在系统中进行WebApi的配置
  3. /// </summary>
  4. [DependsOn(typeof(AbpWebApiModule), typeof(AbpProjectTemplateApplicationModule))]
  5. public class AbpProjectTemplateWebAppApiModule : AbpModule
  6. {
  7. public override void Initialize()
  8. {
  9. IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
  10. Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder
  11. .ForAll<IApplicationService>(typeof(AbpProjectTemplateApplicationModule).Assembly, "app")
  12. .Build();
  13. Configuration.Modules.AbpWebApi().HttpConfiguration.Filters.Add(new HostAuthenticationFilter("Bearer"));
  14. }
  15. }

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

跑起来了后的截图:

接口太多了。那么我们就来折腾下

首先在application层创建一个

  1. /// <summary>
  2. /// 使用该特性进行app过滤
  3. ///
  4. /// </summary>
  5. public class WebAppApiAttribute:System.Attribute
  6. {
  7. }

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

  1. Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder
  2. .ForAll<IApplicationService>(Assembly.GetExecutingAssembly(), "app")
  3. .ForMethods(builder =>
  4. {
  5. if (!a.Method.IsDefined(typeof(WebAppApiAttribute)))
  6. {
  7. a.DontCreate = true;
  8. }
  9. })
  10. .Build();

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

  1. public interface ICachingAppService : IApplicationService
  2. {
  3. [WebAppApi]
  4. ListResultDto<CacheDto> GetAllCaches();
  5. Task ClearCache(EntityDto<string> input);
  6. [WebAppApi]
  7. Task ClearAllCaches();
  8. }

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

更多的玩法,请参考官方文档:

Dynamic Web API Layer

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

[ABP框架]动态web Api的拦截用法。的更多相关文章

  1. ABP框架 - 动态Web Api层

    文档目录 本节内容: 创建动态Web Api控制器 ForAll 方法 重写 ForAll ForMethods Http 动词 WithVerb 方法 HTTP 特性 命名约定 Api 浏览器 Re ...

  2. DDD开发框架ABP之动态Web API层

    建立动态Web API 控制器 ASP.NET Boilerplate 能够自动为您的应用层产生Web API层.比如说我们有如下的一个应用服务: public interface ITaskAppS ...

  3. 【asp.net core】实现动态 Web API

    序言: 远程工作已经一个月了,最近也算是比较闲,每天早上起床打个卡,快速弄完当天要做的工作之后就快乐摸鱼去了.之前在用 ABP 框架(旧版)的时候就觉得应用服务层写起来真的爽,为什么实现了个 IApp ...

  4. 基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用

    我前面几篇随笔介绍了关于几篇关于SqlSugar的基础封装,已经可以直接应用在Winform项目开发上,并且基础接口也通过了单元测试,同时测试通过了一些Winform功能页面:本篇随笔继续深化应用开发 ...

  5. ABP文档 - Web Api 控制器

    文档目录 本节内容: 简介 AbpApiController 基类 本地化 其它 过滤 审计日志 授权 防伪造过滤 工作单元 结果包装和异常处理 结果缓存 验证 模块绑定器 简介 通过Abp.Web. ...

  6. 动态Web API层

    返回总目录 本篇目录 构建动态Web API控制器 ForAll 方法 重写ForAll 方法 Http动词 动态Javascript代理 Ajax参数 单一服务脚本 Angular支持 Durand ...

  7. ASP。NET Core Blazor CRUD使用实体框架和Web API

    下载source code - 1.7 MB 介绍 *请查看我的Youtube视频链接来学习ASP.NET Core Blazor CRUD使用实体框架和Web API. 在本文中,我们将了解如何为A ...

  8. 手工搭建ABP框架(1) - Web项目

    为了防止不提供原网址的转载,特在这里加上原文链接: http://www.cnblogs.com/skabyy/p/7295533.html ABP是 ASP.NET Boilerplate Proj ...

  9. ABP理论学习之Web API控制器(新增)

    返回总目录 本篇目录 介绍 AbpApiController基类 本地化 审计日志 授权 工作单元 其他 介绍 ABP通过Abp.Web.ApiNuget包集成了 ASP.NET Web API控制器 ...

随机推荐

  1. 由"永恒之蓝"病毒而来的电脑科普知识

    永恒之蓝病毒事件: 继英国医院被攻击,随后在刚刚过去的5月12日晚上20点左右肆虐中国高校的WannaCry勒索事件,全国各地的高校学生纷纷反映,自己的电脑遭到病毒的攻击,文档被加密,壁纸遭到篡改,并 ...

  2. Java学习笔记——设计模式之五.工厂方法

    水边一只青蛙在笑 --石头和水 工厂方法模式(Factory Method),定义了一个用于创建对象的接口,让实现类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 这里在简单和工厂的基础上 ...

  3. Redis学习-Sentinel

    Redis的Sentinel系统用于管理多个Redis服务器(instance), 该系统执行以下三个任务: 监控(Monitoring):Sentinel会不断地检查你的主服务器和从服务器是否运作正 ...

  4. 什么是mybatis 为什么要使用my batis

    1.定义MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.2.使用原因MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用 ...

  5. centos mysql5.7 二进制包安装

    此种方式安装非常简单 cd /usr/local 下载安装包wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-linux- ...

  6. 018 关联映射文件中<class>标签中的lazy(懒加载)属性

    Lazy(懒加载): 只有在正真使用该对象时,才会创建这个对象 Hibernate中的lazy(懒加载): 只有我们在正真使用时,它才会发出SQL语句,给我们去查询,如果不使用对象则不会发SQL语句进 ...

  7. struts2.1.6教程十一、注解配置

    在此先略去注解配置的实例,具体可以参看官方提供的文档.其实在熟悉struts及相关的一些内容后,再来看文档是比较容易理解得.只是要注意使用注解Annotition时: (1)要多导入一个jar包:st ...

  8. struts2.1.6教程六、使用标签

    1.基础表单标签 准备工作:建立struts2tag项目,搭建好struts2的开发环境.在html我们常用的基础表单标签主要有文本域.密码域.提交.重置四种.它们在strust2中可以通过标签来生成 ...

  9. Jmeter Boss系统login

    之前说,想学习并且掌握自动化测试,但是,折腾过来折腾过去,逐渐意识到了,app自动化测试分为UI层面还有接口测试.(其实,功能测试就是UI+接口测试的集合,当然,只是我自己这么认为,hhhhhhh) ...

  10. 六一儿童节PHP宝宝又被围剿了,迅速围观!

    原文链接 据说这是2020年某国际多语言幼儿园的官方讨论会现场外泄图片,程序员宝宝们,你们同意会议结果吗? 据说这是2020年某国际多语言幼儿园的官方讨论会现场外泄图片,程序员宝宝们,你们同意会议结果 ...