ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi
点这里进入ABP系列文章总目录
ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi
ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。
ABP的官方网站:http://www.aspnetboilerplate.com
ABP在Github上的开源项目:https://github.com/aspnetboilerplate
建立动态WebApi控制器
Abp框架能够通过应用层自动生成web api:
public interface ITaskAppService : IApplicationService{GetTasksOutput GetTasks(GetTasksInput input);void UpdateTask(UpdateTaskInput input);void CreateTask(CreateTaskInput input);}
Abp框架通过一行关键代码的配置就可以自动、动态的为应用层建立一个web api 控制器:
DynamicApiControllerBuilder.For<ITaskAppService>("tasksystem/task").Build();
这样就OK了!建好的webapi控制器(/api/services/tasksystem/task)所有的方法都能够在客户端调用。webapi控制器通常是在模块初始化的时候完成配置。 ITaskAppService是应用层服务(application service)接口,我们通过封装让接口实现一个api控制器。ITaskAppService不仅限于在应用层服务使用,这仅仅是我们习惯和推荐的使用方法。 tasksystem/task是api 控制器的命名空间。一般来说,应当最少定义一层的命名空间,如:公司名称/应用程序/命名空间/命名空间1/服务名称。 ‘api/services/’是所有动态web api的前缀。所以api控制器的地址一般是这样滴:‘/api/services/tasksystem/task’,GetTasks 方法的地址一般是这样滴: ‘/api/services/tasksystem/task/getTasks’。因为在传统的js中都是使用驼峰式命名方法,这里也不一样。 你也可以删除一个api方法,如下:
DynamicApiControllerBuilder.For<ITaskAppService>("tasksystem/taskService").ForMethod("CreateTask").DontCreateAction().Build();
ForAll方法 在程序的应用服务层建立多个api控制器可能让人觉得比较枯燥,DynamicApiControllerBuilper提供了建立所有应用层服务的方法,如下所示:
DynamicApiControllerBuilder.ForAll<IApplicationService>(Assembly.GetAssembly(typeof(SimpleTaskSystemApplicationModule)), "tasksystem").Build();
ForAll方法是一个泛型接口,第一个参数是从给定接口中派生的集合,最后一个参数则是services命名空间的前缀。ForAll集合有ITaskAppService和 IpersonAppService接口。根据如上配置,服务层的路由是这样的:'/api/services/tasksystem/task'和'/api/services/tasksystem/person'。
服务命名约定:服务名+AppService(在本例中是person+AppService) 的后缀会自动删除,生成的webapi控制器名为“person”。同时,服务名称将采用峰驼命名法。如果你不喜欢这种约定,你也可以通过“WithServiceName”方法来自定义名称。如果你不想创建所有的应用服务层,可以使用where来过滤部分服务。
使用动态JavaScript代理
你可以通过ajax来动态创建web api控制器。Abp框架对通过动态js代理建立web api 控制器做了些简化,你可以通过js来动态调用web api控制器
abp.services.tasksystem.task.getTasks({state: 1}).done(function (data) {//use data.tasks here..});
js代理是动态创建的,页面中需要添加引用:
<script src="/api/abp.ServiceProxies/GetAll" type="text/javascript"></script>
服务方法(service methods)返回约定(可参见JQ的Deferred),服务方法使用Abp框架.ajax代替,可以处理、显示错误。
Ajax参数
自定义ajax代理方法的参数:
Abp.services.tasksystem.task.createTask({assignedPersonId: 3,description: 'a new task description...'},{ //override jQuery's ajax parametersasync: false,timeout: 30000}).done(function () {Abp.notify.success('successfully created a task!');});
所有的jq.ajax参数都是有效的。
单一服务脚本
'/api/abpServiceProxies/GetAll'将在一个文件中生成所有的代理,通过 '/api/abpServiceProxies/Get?name=serviceName' 你也可以生成单一服务代理,在页面中添加:
<script src="/api/abpServiceProxies/Get?name=tasksystem/task" type="text/javascript"></script>
Augular框架支持
Abp框架能够公开动态的api控制器作为angularjs服务,如下所示:
(function() {angular.module('app').controller('TaskListController', ['$scope', 'abp.services.tasksystem.task',function($scope, taskService) {var vm = this;vm.tasks = [];taskService.getTasks({state: 0}).success(function(data) {vm.tasks = data.tasks;});}]);})();
我们可以将名称注入服务,然后调用此服务,跟调用一般的js函数一样。注意:我们成功注册处理程序后,他就像一个augular的$http服务。ABP框架使用angular框架的$http服务,如果你想通过$http来配置,你可以设置一个配置对象作为服务方法的一个参数。
要使用自动生成的服务,需要添加:
<script src="~/abp Framework/Framework/scripts/libs/angularjs/Abp Framework.ng.js"></script><script src="~/api/abp Framework/ServiceProxies/GetAll?type=angular"></script>
Durandal支持
ABP框架可以注入服务到Durandal框架,如下:
define(['service!tasksystem/task'],function (taskService) {//taskService can be used here});
ABP框架配置Durandal(实际上是Require.js)来解析服务代理并注入合适的js到服务代理。
希望更多国内的架构师能关注到ABP这个项目,也许这其中有能帮助到您的地方,也许有您的参与,这个项目可以发展得更好。
欢迎加QQ群:
ABP架构设计交流群:134710707 ABP架构设计交流2群: 579765441
点这里进入ABP系列文章总目录
转载于:https://www.cnblogs.com/mienreal/p/4690785.html
ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi相关推荐
- ABP(现代ASP.NET样板开发框架)系列之2、ABP入门教程
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是"ASP.NET Boilerplate Project (ASP.NET样 ...
- ABP动态生成WebAPI
ABP框架可以动态生成WebApi,开发人员无需创建APIController,直接继承IApplicationService接口,即可对外发布webApi. 创建动态Web Api 控制器 例如,在 ...
- ABP入门系列(5)——展现层实现增删改查
ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 这一章节将通过完善Controller.View.ViewModel,来实现展现层的增删改查.最终 ...
- [置顶]ABP入门系列目录——学习Abp框架之实操演练
本系列文章主要是基于ABP模板开发Mpa(多页面)『任务清单』项目. 由于是入门系列,不会用到代码生成器,每一行代码都是手动敲入. 源码已上传至Github-LearningMpaAbp,可自行参考. ...
- ASP.NET企业开发框架IsLine FrameWork系列之十五--框架配置信息大全(下)
ASP.NET企业开发框架IsLine FrameWork系列之十五--框架配置信息大全(下) 接上文 三.IsLine.ExceptionProcess 部分 这部分主要管理异常,对异常的管理分 ...
- ASP.NET企业开发框架IsLine FrameWork系列之十四--框架配置信息大全(中)
ASP.NET企业开发框架IsLine FrameWork系列之十四--框架配置信息大全(中) 接上文 上文中讲到配置日志模块的第二步,这篇文章继续给大家介绍日志配置方法. Step 3.在</ ...
- ASP.NET企业开发框架IsLine FrameWork系列之十三--框架配置信息大全(上)
ASP.NET企业开发框架IsLine FrameWork系列之十三--框架配置信息大全(上) IsLine FrameWork一个是支持企业应用系统开发的框架,开发人员可以在其基础上对企业所需的应用 ...
- ASP.NET企业开发框架IsLine FrameWork系列之十二--使用Session、Cookie与安全支持
ASP.NET企业开发框架IsLine FrameWork系列之十二--使用Session.Cookie与安全支持 今天来介绍IsLine.HttpContent.HttpContentProvide ...
- ASP.NET企业开发框架IsLine FrameWork系列之十一--HttpContentProvider 访问缓存
ASP.NET企业开发框架IsLine FrameWork系列之十一--HttpContentProvider 访问缓存 今天我们来介绍 IsLine.HttpContent.HttpContentP ...
- ASP.NET企业开发框架IsLine FrameWork系列之十--ExceptionProcessProvider异常框架(下)
ASP.NET企业开发框架IsLine FrameWork系列之十--ExceptionProcessProvider异常框架(下) 接上文 异常展示 系统异常模块除了记录功能,还有一个很 ...
最新文章
- selenium--driver.switchTo()
- 再一次输给了AI,弯道急速超车、登上 Nature 封面
- 看到好东西, 赶紧收藏一下
- linux内核杂记(2)-内核的同步与并发
- ELK+kafka日志系统搭建-实战
- 小试牛刀JavaScript鼠标事件
- TypeScript 的 generic 函数
- SSAS parent/child dimension
- 面试:Java线程有哪几种状态,它们之间是如何切换的
- 使用JQuery的Blazor日期选择器组件
- 一些机器学习算法总结
- MySql 把B表数据插入到A表中
- 【洛谷P5019+P1969+P3078】道路铺设(暴力模拟/差分)
- 计算机主板别称是什么城,上海别称什么城?
- 软件测试工程师绩效考核细则,软件测试工程师绩效考核方案
- 使用lanyu的激活码,报错1653219,解决办法
- 本科课程【计算机网络】实验2 - 交换机的VLAN配置实验
- 编译原理——编译程序的组成
- 爬瓜子二手车(json接口)
- 国外免费网管软件推荐
热门文章
- 回忆大学到现在为止学到了什么?
- Silverlight 与 WPF 的一些差异
- POJ 3415 Common Substrings(后缀数组 + 单调栈)题解
- 『参考』.net CF组件编程(1)——基础之后
- 近似推断:使用高斯混合模型
- setInterval 和 setTimeout
- Subversion代码提交中的org.apache.subversion.javahl.ClientException: svn: E200007: Commit failed异常解决...
- Struts2整合Spring方法及原理
- Ubuntu14.04如何启用界面root账户登录
- 12个新鲜出炉的Web开发框架