mirror of https://github.com/abpframework/abp.git
csharpabpc-sharpframeworkblazoraspnet-coredotnet-coreaspnetcorearchitecturesaasdomain-driven-designangularmulti-tenancy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.8 KiB
144 lines
4.8 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Volo.Abp.Http.Modeling;
|
|
|
|
namespace Volo.Abp.Http.ProxyScripting.Generators
|
|
{
|
|
internal 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;
|
|
}
|
|
}
|
|
}
|
|
|