自动从 Swagger 生成前端所需的 Type 和 Service
- 安装 dotnet tool
dotnet tool install --global Passingwind.Git-CI-Tools
- 配置 swagger service
options.SchemaFilter<SwaggerEnumDescriptions>();
options.CustomSchemaIds(type =>
{
if (type.IsGenericType)
{
var part1 = type.FullName.Substring(0, type.FullName.IndexOf("`")).RemovePostFix("Dto");
var part2 = string.Concat(type.GetGenericArguments().Select(x => x.Name.RemovePostFix("Dto")));
if (part1.EndsWith("ListResult") || part1.EndsWith("PagedResult"))
{
var temp1 = part1.Substring(0, part1.LastIndexOf("."));
var temp2 = part1.Substring(part1.LastIndexOf(".") + 1);
return $"{temp1}.{part2}{temp2}";
}
return $"{part1}.{part2}";
}
return type.FullName.RemovePostFix("Dto");
});
options.CustomOperationIds(e =>
{
var action = e.ActionDescriptor.RouteValues["action"];
var controller = e.ActionDescriptor.RouteValues["controller"];
var method = e.HttpMethod;
if (action == "GetList")
return $"Get{controller}List";
if (action == "GetAllList")
return $"GetAll{controller}List";
if (action.StartsWith("GetAll"))
return $"GetAll{controller}{action.RemovePreFix("GetAll")}";
if (action == ("Get") || action == ("Create") || action == ("Update") || action == ("Delete"))
return action + controller;
if (action.StartsWith("Get"))
return $"Get{controller}{action.RemovePreFix("Get")}";
if (action.StartsWith("Create"))
return $"Create{controller}{action.RemovePreFix("Create")}";
if (action.StartsWith("Update"))
return $"Update{controller}{action.RemovePreFix("Update")}";
if (action.StartsWith("Delete"))
return $"Delete{controller}{action.RemovePreFix("Delete")}";
if (action.StartsWith("BatchDelete"))
return $"BatchDelete{controller}";
if (method == "HttpGet")
return action + controller;
else
return controller + action;
});
public class SwaggerEnumDescriptions : ISchemaFilter
{
public void Apply(OpenApiSchema schema, SchemaFilterContext context)
{
var type = context.Type;
if (type.IsEnum)
{
var names = Enum.GetNames(type);
var values2 = new OpenApiArray();
values2.AddRange(names.Select(x => new OpenApiObject
{
["name"] = new OpenApiString(Convert.ToInt32(Enum.Parse(type, x)).ToString()),
["value"] = new OpenApiString(x),
}));
var values1 = new OpenApiArray();
values1.AddRange(names.Select(x => new OpenApiString(x)));
schema.Extensions.Add(
"x-enumNames",
values1
);
schema.Extensions.Add(
"x-ms-enum",
new OpenApiObject
{
["name"] = new OpenApiString(type.Name),
["modelAsString"] = new OpenApiBoolean(true),
["values"] = values2,
}
);
}
}
}
- 使用。打开命令行工具
abptool gen fontend ts --swagger-url http://localhost:56876/swagger/v1/swagger.json --output xxxxxx\src\services\Biz
将会输出 services 和 types 文件。
Categories:
.net
, html.css.js
Tags:
abp
已禁用评论。