using NCC.ConfigurableOptions; using Microsoft.Extensions.Configuration; using System.ComponentModel.DataAnnotations; namespace NCC.DynamicApiController { /// /// 动态接口控制器配置 /// public sealed class DynamicApiControllerSettingsOptions : IConfigurableOptions { /// /// 默认路由前缀 /// public string DefaultRoutePrefix { get; set; } /// /// 默认请求谓词 /// [Required] public string DefaultHttpMethod { get; set; } /// /// 默认模块名称 /// public string DefaultModule { get; set; } /// /// 小写路由 /// public bool? LowercaseRoute { get; set; } /// /// 保留行为名称谓词 /// public bool? KeepVerb { get; set; } /// /// 保留名称 /// public bool? KeepName { get; set; } /// /// 骆驼命名分隔符 /// public string CamelCaseSeparator { get; set; } /// /// 版本号分隔符 /// [Required] public string VersionSeparator { get; set; } /// /// 模型转查询参数(只有GET、HEAD请求有效) /// public bool? ModelToQuery { get; set; } /// /// 支持Mvc控制器处理 /// public bool? SupportedMvcController { get; set; } /// /// 配置参数 [FromQuery] 化,默认 false ([FromRoute]) /// public bool? UrlParameterization { get; set; } /// /// 被舍弃的控制器名称前后缀 /// public string[] AbandonControllerAffixes { get; set; } /// /// 被舍弃的行为名称前后缀 /// public string[] AbandonActionAffixes { get; set; } /// /// 复写默认配置路由规则配置 /// public object[][] VerbToHttpMethods { get; set; } /// /// 默认区域 /// public string DefaultArea { get; set; } /// /// 选项后期配置 /// /// /// public void PostConfigure(DynamicApiControllerSettingsOptions options, IConfiguration configuration) { options.DefaultRoutePrefix ??= "api"; options.DefaultHttpMethod ??= "POST"; options.LowercaseRoute ??= true; options.KeepVerb ??= false; options.KeepName ??= false; options.CamelCaseSeparator ??= "-"; options.VersionSeparator ??= "@"; options.ModelToQuery ??= false; options.SupportedMvcController ??= false; options.AbandonControllerAffixes ??= new string[] { "AppServices", "AppService", "ApiController", "Controller", "Services", "Service" }; options.AbandonActionAffixes ??= new string[] { "Async" }; } } }