From b6f23379db27c834c76aab6796ff2e4036eacf65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 6 Oct 2017 10:46:41 +0300 Subject: [PATCH] Use full namespace for js proxies. --- .../JQuery/JQueryProxyScriptGenerator.cs | 38 ++++++++++++++----- .../Generators/ProxyScriptingJsFuncHelper.cs | 2 +- .../Volo/Abp/Identity/FixtureController.cs | 7 ++++ .../Abp/Identity/V4/FixtureV4Controller.cs | 26 +++++++++++++ 4 files changed, 62 insertions(+), 11 deletions(-) create mode 100644 src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/V4/FixtureV4Controller.cs diff --git a/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/JQuery/JQueryProxyScriptGenerator.cs b/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/JQuery/JQueryProxyScriptGenerator.cs index 8310d286ed..d910109caa 100644 --- a/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/JQuery/JQueryProxyScriptGenerator.cs +++ b/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/JQuery/JQueryProxyScriptGenerator.cs @@ -1,5 +1,8 @@ using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using Volo.Abp.Application.Services; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Modeling; @@ -20,8 +23,6 @@ namespace Volo.Abp.Http.ProxyScripting.Generators.JQuery script.AppendLine("/* This file is automatically generated by ABP framework to use MVC Controllers from javascript. */"); script.AppendLine(); - script.AppendLine("var abp = abp || {};"); - script.AppendLine("abp.services = abp.services || {};"); foreach (var module in model.Modules.Values) { @@ -37,9 +38,9 @@ namespace Volo.Abp.Http.ProxyScripting.Generators.JQuery //TODO: Eleminate repeating module.RootPath.Replace("/", ".").ToCamelCase() ! //TODO: Remove illegal chars (like '-') from module/controller names! - script.AppendLine($"// module '{module.RootPath.ToCamelCase()}'"); + script.AppendLine($"// module {module.RootPath.ToCamelCase()}"); + script.AppendLine(); script.AppendLine("(function(){"); - script.AppendLine($"abp.utils.createNamespace(abp, 'services.{module.RootPath.Replace("/", ".").ToCamelCase()}');"); foreach (var controller in module.Controllers.Values) { @@ -53,28 +54,30 @@ namespace Volo.Abp.Http.ProxyScripting.Generators.JQuery private static void AddControllerScript(StringBuilder script, ModuleApiDescriptionModel module, ControllerApiDescriptionModel controller) { - script.AppendLine($" // controller '{controller.ControllerName.ToCamelCase()}'"); + var controllerName = GetNormalizedTypeName(controller.TypeAsString); + + script.AppendLine($" // controller {controllerName}"); + script.AppendLine(); script.AppendLine(" (function(){"); script.AppendLine(); - script.AppendLine($" abp.services.{module.RootPath.Replace("/", ".").ToCamelCase()}.{controller.ControllerName.ToCamelCase()} = abp.services.{module.RootPath.Replace("/", ".").ToCamelCase()}.{controller.ControllerName.ToCamelCase()} || {{}};"); + script.AppendLine($" abp.utils.createNamespace(window, '{controllerName}');"); foreach (var action in controller.Actions.Values) { script.AppendLine(); - AddActionScript(script, module, controller, action); + AddActionScript(script, module, controllerName, controller, action); } script.AppendLine(); script.AppendLine(" })();"); } - private static void AddActionScript(StringBuilder script, ModuleApiDescriptionModel module, ControllerApiDescriptionModel controller, ActionApiDescriptionModel action) + private static void AddActionScript(StringBuilder script, ModuleApiDescriptionModel module, string controllerName, ControllerApiDescriptionModel controller, ActionApiDescriptionModel action) { var parameterList = ProxyScriptingJsFuncHelper.GenerateJsFuncParameterList(action, "ajaxParams"); - script.AppendLine($" // action '{action.Name.ToCamelCase()}'"); - script.AppendLine($" abp.services.{module.RootPath.Replace("/", ".").ToCamelCase()}.{controller.ControllerName.ToCamelCase()}{ProxyScriptingJsFuncHelper.WrapWithBracketsOrWithDotPrefix(action.Name.RemovePostFix("Async").ToCamelCase())} = function({parameterList}) {{"); + script.AppendLine($" {controllerName}{ProxyScriptingJsFuncHelper.WrapWithBracketsOrWithDotPrefix(action.Name.RemovePostFix("Async").ToCamelCase())} = function({parameterList}) {{"); script.AppendLine(" return abp.ajax($.extend(true, {"); AddAjaxCallParameters(script, controller, action); @@ -121,5 +124,20 @@ namespace Volo.Abp.Http.ProxyScripting.Generators.JQuery script.AppendLine(); } + + private static string GetNormalizedTypeName(string typeWithAssemblyName) + { + return CamelCaseWithNamespace( + typeWithAssemblyName.Split(",")[0] + .Trim() + .RemovePostFix(ApplicationService.CommonPostfixes) + .RemovePostFix("Controller") + ); + } + + private static string CamelCaseWithNamespace(string name) + { + return name.Split('.').Select(n => n.ToCamelCase()).JoinAsString("."); + } } } \ No newline at end of file diff --git a/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingJsFuncHelper.cs b/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingJsFuncHelper.cs index a92bbe1710..baa52f3155 100644 --- a/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingJsFuncHelper.cs +++ b/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingJsFuncHelper.cs @@ -133,7 +133,7 @@ namespace Volo.Abp.Http.ProxyScripting.Generators public static string GenerateJsFuncParameterList(ActionApiDescriptionModel action, string ajaxParametersName) { - var methodParamNames = action.Parameters.Select(p => p.NameOnMethod).Distinct().ToList(); + var methodParamNames = action.ParametersOnMethod.Select(p => p.Name).Distinct().ToList(); methodParamNames.Add(ajaxParametersName); return methodParamNames.Select(prmName => NormalizeJsVariableName(prmName.ToCamelCase())).JoinAsString(", "); } diff --git a/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/FixtureController.cs b/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/FixtureController.cs index 7826bc5e7b..552573e1d7 100644 --- a/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/FixtureController.cs +++ b/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/FixtureController.cs @@ -35,5 +35,12 @@ namespace Volo.Abp.Identity { return 43; } + + [HttpPost] + [Route("{id}")] + public int Post(int id) + { + return id; + } } } \ No newline at end of file diff --git a/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/V4/FixtureV4Controller.cs b/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/V4/FixtureV4Controller.cs new file mode 100644 index 0000000000..a5a3fa5655 --- /dev/null +++ b/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/V4/FixtureV4Controller.cs @@ -0,0 +1,26 @@ +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.ApiVersioning; +using Volo.Abp.Application.Services; +using Volo.Abp.AspNetCore.Mvc; + +namespace Volo.Abp.Identity.V4 +{ + //TODO: This is just a test controller and will be removed later + [ApiVersion("4.0")] + [Route("api/v{api-version:apiVersion}/identity/fixture")] + public class FixtureController : AbpController, IRemoteService + { + private readonly IRequestedApiVersion _requestedApiVersion; + + public FixtureController(IRequestedApiVersion requestedApiVersion) + { + _requestedApiVersion = requestedApiVersion; + } + + [HttpGet] + public string Get() + { + return 41 + " - " + _requestedApiVersion.Current; + } + } +} \ No newline at end of file