ABP动态webapi前端怎么调用?

研究abp项目时,页面js文件中一直不明白abp.services... 是从哪里来的

在调试SimpleTaskSystem的AngularJs demo时,一开始我只看到对服务的应用。

1
2
3
4
5
app.controller(controllerId, [
 
'$scope', 'abp.services.tasksystem.task',
 
function($scope, taskService){}]);

  

在查找源代码中的所有js文件后还是没找到abp.services.tasksystem.task的定义,那么现在就剩下最后一种情况。这些服务是系统生成的,这样的话与动态WebApi的设计思路也是一致的。在layout.cshtml中有两处js引用

1
2
3
<script src="~/api/AbpServiceProxies/GetAll?type=angular"></script>
 
<script src="~/AbpScripts/GetScripts" type="text/javascript"></script>

  

生成所有服务

~/api/AbpServiceProxies/GetAll?type=angular 对应的就是就是Abp对系统所有服务生成的JavaScript,现在对url进行反推我们可以在Abp.Web.Api中找到AbpServiceProxiesController,其中有一ScriptProxyManager 类型的字段_scriptProxyManager。ScriptProxyManager就是生成所有服务的一管理者。

在AbpServiceProxiesController中的GetAll方法有一参数type。这个参数表示根据什么js框架生成javascript,目前Abp提供了Angular与jQuery两种支持。

在ScriptProxyManager中会根据不同的type调用不同的IScriptProxyGenerator生成javascript代码。以Angular的实现AngularProxyGenerator为例。

public string Generate()
{
var script = new StringBuilder(); script.AppendLine("(function (abp, angular) {");
script.AppendLine("");
script.AppendLine(" if (!angular) {");
script.AppendLine(" return;");
script.AppendLine(" }");
script.AppendLine(" ");
script.AppendLine(" var abpModule = angular.module('abp');");
script.AppendLine(" ");
script.AppendLine(" abpModule.factory('abp.services." + _controllerInfo.ServiceName.Replace("/", ".") + "', [");
script.AppendLine(" '$http', function ($http) {");
script.AppendLine(" return new function () {"); foreach (var methodInfo in _controllerInfo.Actions.Values)
{
var actionWriter = CreateActionScriptWriter(_controllerInfo, methodInfo); script.AppendLine(" this." + methodInfo.ActionName.ToCamelCase() + " = function (" + GenerateJsMethodParameterList(methodInfo.Method) + ") {");
script.AppendLine(" return $http(angular.extend({");
script.AppendLine(" abp: true,");
script.AppendLine(" url: abp.appPath + '" + actionWriter.GetUrl() + "',");
actionWriter.WriteTo(script);
script.AppendLine(" }, httpParams));");
script.AppendLine(" };");
script.AppendLine(" ");
} script.AppendLine(" };");
script.AppendLine(" }");
script.AppendLine(" ]);");
script.AppendLine(); //generate all methods script.AppendLine();
script.AppendLine("})((abp || (abp = {})), (angular || undefined));"); return script.ToString();
}

AngularProxyGenerator对所有的服务与Action进行了扫描生成javascript。

不过将所有服务都返回到客户端,好像并不怎么安全。

另外ScriptProxyManager对生成的javascript代码进行了缓存。

基础配置

~/AbpScripts/GetScripts对应的则是Abp.Web.Mvc下的AbpScriptsController,AbpScriptsController主要提供一些基础的配置信息到客户端。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[DisableAuditing]
public async Task<ActionResult> GetScripts()
{
    var sb = new StringBuilder();
 
    sb.AppendLine(_multiTenancyScriptManager.GetScript());
    sb.AppendLine();
 
    sb.AppendLine(_sessionScriptManager.GetScript());
    sb.AppendLine();
     
    sb.AppendLine(_localizationScriptManager.GetScript());
    sb.AppendLine();
     
    sb.AppendLine(await _authorizationScriptManager.GetScriptAsync());
    sb.AppendLine();
     
    sb.AppendLine(await _navigationScriptManager.GetScriptAsync());
    sb.AppendLine();
     
    sb.AppendLine(await _settingScriptManager.GetScriptAsync());
 
    sb.AppendLine(GetTriggerScript());
 
    return Content(sb.ToString(), "application/x-javascript", Encoding.UTF8);
}

  

这些信息分别是:

接口

实现

说明

IMultiTenancyScriptManager

MultiTenancyScriptManager

多租户配置

ISettingScriptManager

SettingScriptManager

Abp基础配置

INavigationScriptManager

NavigationScriptManager

导航信息

ILocalizationScriptManager

LocalizationScriptManager

本地化

IAuthorizationScriptManager

AuthorizationScriptManager

权限

ISessionScriptManager

SessionScriptManager

Session信息

动态We API层(动态生成js)的更多相关文章

  1. ABP框架 - 动态Web Api层

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

  2. 动态Web API层

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

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

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

  4. ABP官方文档翻译 5.2 动态We API层

    动态Web APID层 创建动态Web API控制器 ForAll方法 重写ForAll ForMethods Http动词 WithVerb方法 HTTP特性 命名约定 API管理器 RemoteS ...

  5. 动态We API(ABP官方文档翻译)

    动态Web API层 创建动态Web API控制器 ForAll方法 重写ForAll ForMethods Http动词 WithVerb方法 HTTP特性 命名约定 API管理器 RemoteSe ...

  6. 开源小工具 - swagger API访问代码生成器(js/typescript)

    现在流行前后端分离,后端通常会使用swagger生成api文档,提供给前端的同事来调用,一般前端是查看这个文档,根据文档说明编写调用代码.其实,swagger已经提供了足够多的描述信息,我们可以基于s ...

  7. ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi

    点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之20.ABP展现层——动态生成WebApi ABP是“ASP.NET Boilerplate Project (ASP.N ...

  8. ABP展现层——动态生成WebApi

    ABP展现层——动态生成WebApi 点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之20.ABP展现层——动态生成WebApi ABP是“ASP.NET Boilerp ...

  9. arcgis api 3.x for js 入门开发系列二十一气泡窗口信息动态配置模板

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

随机推荐

  1. “全栈2019”Java多线程第十八章:同步代码块双重判断详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  2. jvm特性(3)( 收集算法和收集器的概念)

    java内存模型和线程规范 JVM高级特性与实践(三):垃圾收集算法 与 垃圾收集器实现 大致知识点如下: 4种垃圾收集算法概念的学习 7种垃圾收集器特征的学习 一. 垃圾收集算法 1. 标记-清除算 ...

  3. jmeter 中使用ServerAgen链接超时可能出错的原因之一ip不对

    因为我要压测的服务器是需要使用跳板机转发链接的,所以我开始用的是跳板机的IP+ServerAgen端口,发现连不通,实际上应该使用ServerAgen所在服务器的IP,如果:

  4. Mcode的介绍

    开始时进行的Mcode代码积累平台的分析: 登录模块 Login.html登录页面进行用户的登录,把登录好的用户id存到session里面,转到代码模块 Register.html注册页面进行用户的注 ...

  5. Python小白学习之路(十一)—【局部变量和全局变量】【关键字global】【关键字nonlocal】

    写在前面: 几乎有一周没有更新学习笔记了吧 上周一周身体都不怎么舒服 然后还得写开题报告 然后还得看文献 天天就是写写写写写写~~~~~~改改改改改改~~~~~~~~~ 今天又开始学习了 希望之前的没 ...

  6. Eclipse+jboss5 无法启动

    在使用Eclipse luna 配置Jboss5 时,配置成功,但无法在eclipse 控制台上启动. log: Deployment "AttachmentStore" is i ...

  7. 【数组】Search Insert Position

    题目: Given a sorted array and a target value, return the index if the target is found. If not, return ...

  8. Postman—构建工作流

    前言 在使用“Collection Runner”的时候,集合中的请求执行顺序就是请求在Collection中的显示排列顺序.但是,有的时候我们不希望请求按照这样的方式去执行,可能是执行完第一个请求, ...

  9. CDH版本大数据集群下搭建Hue(hadoop-2.6.0-cdh5.5.4.gz + hue-3.9.0-cdh5.5.4.tar.gz)(博主推荐)

    不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...

  10. 18个HTML5和JavaScript游戏引擎库

    1) Best HTML5 and javascript game engine Library-  Impactjs     2) Best HTML5 and javascript game en ...