• ABP之Javascript生成


    ABP之Javascript生成

    还是服务

    在调试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为例。

     View Code

    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信息

  • 相关阅读:
    ASP.NET 表单验证 Part.1(理解表单验证)
    Silverlight 简介 Part.3(设计 Siverlight 页面)
    ASP.NET 成员资格 Part.3(LoginStatus、LoginView、PasswordRecovery)
    ASP.NET 网站部署 Part.1(安装IIS、复制文件部署网站)
    ASP.NET Dynamic Data Part.1(创建动态数据应用程序)
    ASP.NET 安全模型 Part.2(SSL)
    ASP.NET MVC Part.2(扩展基本的 MVC 应用程序)
    ASP.NET 网站部署 Part.2(使用 Web 部署)
    开发高级 Web 部件
    创建 Web 部件(WebPart 类、简单的 Web 部件)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4700703.html
Copyright © 2020-2023  润新知