| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Abp.Collections.Extensions;
- using Abp.Extensions;
- using Abp.Web.Api.Modeling;
- namespace Abp.Web.Api.ProxyScripting.Generators
- {
- public static class ProxyScriptingHelper
- {
- public const string DefaultHttpVerb = "POST";
- public static string GenerateUrlWithParameters(ActionApiDescriptionModel action)
- {
- //TODO: Can be optimized using StringBuilder?
- var url = ReplacePathVariables(action.Url, action.Parameters);
- url = AddQueryStringParameters(url, action.Parameters);
- return url;
- }
- public static string GenerateHeaders(ActionApiDescriptionModel action, int indent = 0)
- {
- var parameters = action
- .Parameters
- .Where(p => p.BindingSourceId == ParameterBindingSources.Header)
- .ToArray();
- if (!parameters.Any())
- {
- return null;
- }
- return ProxyScriptingJsFuncHelper.CreateJsObjectLiteral(parameters, indent);
- }
- public static string GenerateBody(ActionApiDescriptionModel action)
- {
- var parameters = action
- .Parameters
- .Where(p => p.BindingSourceId == ParameterBindingSources.Body)
- .ToArray();
- if (parameters.Length <= 0)
- {
- return null;
- }
- if (parameters.Length > 1)
- {
- throw new AbpException(
- $"Only one complex type allowed as argument to a controller action that's binding source is 'Body'. But {action.Name} ({action.Url}) contains more than one!"
- );
- }
- return ProxyScriptingJsFuncHelper.GetParamNameInJsFunc(parameters[0]);
- }
- public static string GenerateFormPostData(ActionApiDescriptionModel action, int indent = 0)
- {
- var parameters = action
- .Parameters
- .Where(p => p.BindingSourceId == ParameterBindingSources.Form)
- .ToArray();
- if (!parameters.Any())
- {
- return null;
- }
- return ProxyScriptingJsFuncHelper.CreateJsObjectLiteral(parameters, indent);
- }
- private static string ReplacePathVariables(string url, IList<ParameterApiDescriptionModel> actionParameters)
- {
- var pathParameters = actionParameters
- .Where(p => p.BindingSourceId == ParameterBindingSources.Path)
- .ToArray();
- if (!pathParameters.Any())
- {
- return url;
- }
- foreach (var pathParameter in pathParameters)
- {
- url = url.Replace($"{{{pathParameter.Name}}}", $"' + {ProxyScriptingJsFuncHelper.GetParamNameInJsFunc(pathParameter)} + '");
- }
- return url;
- }
- private static string AddQueryStringParameters(string url, IList<ParameterApiDescriptionModel> actionParameters)
- {
- var queryStringParameters = actionParameters
- .Where(p => p.BindingSourceId.IsIn(ParameterBindingSources.ModelBinding, ParameterBindingSources.Query))
- .ToArray();
- if (!queryStringParameters.Any())
- {
- return url;
- }
- var qsBuilderParams = queryStringParameters
- .Select(p => $"{{ name: '{p.Name.ToCamelCase()}', value: {ProxyScriptingJsFuncHelper.GetParamNameInJsFunc(p)} }}")
- .JoinAsString(", ");
- return url + $"' + abp.utils.buildQueryString([{qsBuilderParams}]) + '";
- }
- public static string GetConventionalVerbForMethodName(string methodName)
- {
- if (methodName.StartsWith("Get", StringComparison.OrdinalIgnoreCase))
- {
- return "GET";
- }
- if (methodName.StartsWith("Put", StringComparison.OrdinalIgnoreCase) ||
- methodName.StartsWith("Update", StringComparison.OrdinalIgnoreCase))
- {
- return "PUT";
- }
- if (methodName.StartsWith("Delete", StringComparison.OrdinalIgnoreCase) ||
- methodName.StartsWith("Remove", StringComparison.OrdinalIgnoreCase))
- {
- return "DELETE";
- }
- if (methodName.StartsWith("Patch", StringComparison.OrdinalIgnoreCase))
- {
- return "PATCH";
- }
- if (methodName.StartsWith("Post", StringComparison.OrdinalIgnoreCase) ||
- methodName.StartsWith("Create", StringComparison.OrdinalIgnoreCase) ||
- methodName.StartsWith("Insert", StringComparison.OrdinalIgnoreCase))
- {
- return "POST";
- }
- //Default
- return DefaultHttpVerb;
- }
- }
- }
|