ABP 基于DDD的.NET开发框架 学习(六)创建新动态Api
我们想要这个服务暴露成一个Web API控制器,以方便客户端调用。ASP.NET Boilerplate能够自动且动态地为这个应用服务创建Web API 控制器,只需要一行配置代码即可完成。
DynamicApiControllerBuilder.For<ITaskAppService>("tasksystem/task").Build();
这几乎是全部代码!一个API控制器被创建,其地址是“/api/services/tasksystem/task”,同时所有的方法在客户端都是可用的。这个配置通常是在模型初始化的时候执行。
ITaskAppService 是我们想要包装成API控制器的应用服务,这是没有严格限制的,但是一种通用且推荐的做法。“tasksystem/task”是API控制器的命名空间的名称,名称可以是任意的。你可以定义至少一个层级的命名空间,也可以定义更多层级的命名空间,比如: “myCompany/myApplication/myNamespace1/myNamespace2/myServiceName”。“/api/services/”是所有动态Web API控制器的前缀。因此,API控制器的地址就会是: “/api/services/tasksystem/task”,同时 GetTasks方法的地址就是“/api/services/tasksystem/task/getTasks”。其中方法名称会被自动转换成camel规则(首字母小写),这是Javascript代码的传统惯例。
你也可以将应用服务的某些方法从API方法中排除,比如你可以向下面这样定义:
1 DynamicApiControllerBuilder
2 .For<ITaskAppService>("tasksystem/taskService")
3 .ForMethod("CreateTask").DontCreateAction()
4 .Build();
ForAll 方法
在一个应用系统中,我们可能有很多个应用服务,那么一个接一个地建立API将是一件冗长无聊且容易遗忘的工作。
DynamicApiControllerBuilder提供了一个方法只要一次调用就能为所有应用服务建立Web API控制器:
1 DynamicApiControllerBuilder
2 .ForAll<IApplicationService>(Assembly.GetAssembly(typeof(SimpleTaskSystemApplicationModule)), "tasksystem")
3 .Build();
ForAll 是个泛型方法,泛型类型是一个接口. 第一个参数是程序集,里面有一些实现了给定接口的类。最后一个接口是服务的命名空间前缀。比如说,在程序集里我们有ITaskAppService 和IPersonAppService 两个接口。根据配置,服务将会是“/api/services/tasksystem/task” 和“/api/services/tasksystem/person”。为了产生服务名称,框架会将接口名称中的Service 和AppService 后缀以及I前缀自动去除。同时服务名称也会自动被转换成符合camel大小写规则。如果你不喜欢这样的转换,可以使用“WithServiceName”方法,这样你可以自行决定名称。 这对于为绝大部分应用服务建立API控制器是非常有帮助的。
使用动态Javascript代理
你可以在Javascript的 Ajax方法中使用这些动态创建的Web API。ASP.NET Boilerplate也提供的更简单的方式:为动态Web API控制器创建了动态的Javascript代理。因此,你能够在Javascript中像调用函数一样调用一个动态Web API方法:
1 abp.services.tasksystem.task.getTasks({
2 state: 1
3 }).done(function (data) {
4 //use data.tasks here...
5 });
Javascript代理都是动态创建,使用前你需要在页面中包含动态脚本:
<script src="/api/AbpServiceProxies/GetAll" type="text/javascript"></script>
服务方法返回承诺(查看 jQuery.Deferred)。你能够通过注册实现“完成”,“失败”以及“回调”等等。服务方法里面包含了abp.ajax,它们处理错误并在需要时显示错误信息。
AJAX参数
你可能想要传输自定义的ajax参数到代理方法中。你能够传输第二参数来实现如下:
1 abp.services.tasksystem.task.createTask({
2 assignedPersonId: 3,
3 description: 'a new task description...'
4 },{ // 覆盖jQuery的ajax参数
5 async: false,
6 timeout: 30000
7 }).done(function () {
8 abp.notify.success('successfully created a task!');
9 });
所有 jQuery.ajax 参数在这里都是有效的。
单独服务脚本
“/api/AbpServiceProxies/GetAll”在一个文件中生成所有的服务代理。你也可以使用“/api/AbpServiceProxies/Get?name=serviceName”来生成单独的服务代理,只需要在页面中包含下面的脚本代码:
<script src="/api/AbpServiceProxies/Get?name=tasksystem/task" type="text/javascript"></script>
ABP 基于DDD的.NET开发框架 学习(六)创建新动态Api的更多相关文章
- ABP 基于DDD的.NET开发框架 学习(一)
ABP总体介绍 ABP是ASP.NET Boilerplate Project,ASP.NET样板项目. ABP框架定位于快速开发 ABP是一个用于最快实践和流行开发现代Web应用程序的新起点,旨在成 ...
- ABP 基于DDD的.NET开发框架 学习(二)创建实体
1.创建模型类打开.Core项目,新建新建一个项目文件夹(Demo);为了演示表关联及外键的使用,创建两个类:创建类ClothesCategoty.csusing Abp.Domain.Entitie ...
- ABP 基于DDD的.NET开发框架 学习(五)中使用DevExpress插件
1.DevExpress安装 安装步骤1:开始安装 安装步骤2:选择需要安装的模块 安装步骤3:修改安装路径 安装步骤4:正在安装 安装步骤5:安装完成 2.Vs中设置 1)DevExtremeBun ...
- ABP 基于DDD的.NET开发框架 学习(四)时间控件采用datetimepicker注意事项
$('#datetimepicker1').datetimepicker({ format: 'yyyy/mm/dd hh:ii:ss',//这是只能用小写的大写的与ABP中的字母识别起冲突 loca ...
- ABP 基于DDD的.NET开发框架 学习(三)创建模块:任务管理
1.图标i获取:https://material.io/icons/查看2.js中创建如var _tenantService = abp.services.app.tenant;需清除页面的缓存,按c ...
- ABP 基于DDD的.NET开发框架 学习(七)继承不同的service直接调用api的区别
1.IApplicationService->IBaseService->具体IXXXService 具体XXXService->BaseService,具体IXXXService ...
- 线上分享-- 基于DDD的.NET开发框架-ABP介绍
前言 为了能够帮助.Net开发者开拓视野,更好的把最新的技术应用到工作中,我在3月底受邀到如鹏网.net训练营直播间为各位学弟学妹们进行ABP框架的直播分享.同时为了让更多的.NET开发者了解ABP框 ...
- 基于DDD的.NET开发框架 - ABP领域服务
返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...
- 基于DDD的.NET开发框架 - ABP初探
返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...
随机推荐
- 基于python的学生管理系统(含数据库版本)
这次支持连接到后台的数据库,直接和数据库进行交互,实现基本的增删查改 #!/usr/bin/python3 # coding=utf-8 """ ************ ...
- gitlab备份恢复
1.Gitlab 创建备份1.1 创建备份文件 首先我们得把老服务器上的Gitlab整体备份,使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创 ...
- Scala函数柯里化(Currying or Curry)
柯里化(Currying) 把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术. 简单的实现如下: scala> def ...
- 安装python 3.7
安装 libressl-2.9.2 (SSL) sudo apt-get install libffi-dev (_ctypes) ldconfig -v wget https://www.pytho ...
- 更新Alpine Linux源 sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories apk add xxx
更新Alpine Linux源 国内镜像源 清华TUNA镜像源:https://mirror.tuna.tsinghua.edu.cn/alpine/中科大镜像源:http://mirrors.ust ...
- idea搭建简单ssm框架的最详细教程(新)
为开发一个测试程序,特搭建一个简单的ssm框架,因为网上看到很多都是比较老旧的教程,很多包都不能用了,eclipes搭建并且其中还附带了很多的其他东西,所以特此记录一下mac中idea搭建过程. 另: ...
- db2常用操作命令
1. 打开命令行窗口 #db2cmd 2. 打开控制中心 # db2cmd db2cc 3. 打开命令编辑器 db2cmd db2ce =====操作数据库命令===== 4. 启动数据库实例 #db ...
- Linux共享文件夹映射到Windows磁盘
摘自:https://www.jianshu.com/p/4a06121450e5 1.1方案背景 本方案就是在解决磁盘不足的问题而产生的,利用映射盘的原理将Linux共享文件夹映射到Windows磁 ...
- Shell流程控制语句while
while语法格式: while 判断条件 do 命令 done while语句流程控制图: 实例: [root@youxi1 ~]# vim a.sh #!/bin/bash i=0 while [ ...
- 百练1724 ROADS
总时间限制: 1000ms 内存限制: 65536kB 描述 N cities named with numbers 1 ... N are connected with one-way roa ...