{
  "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
  // App基本配置
  "AppSettings": {
    //  AppSettings：配置根节点
    //  InjectMiniProfiler：是否注入 MiniProfiler，bool 类型，默认 true，关闭 Swagger 左上角监听
    //  InjectSpecificationDocument：是否启用 Swagger 文档，bool 类型，默认 true，生产环境可关闭
    //  EnabledReferenceAssemblyScan：是否启用通过 dll 方式添加的引用程序集扫描，bool 类型，默认 false
    //  ExternalAssemblies：配置外部程序集完整路径，支持动态加载，string[] 类型，默认 []
    //  PrintDbConnectionInfo：是否打印数据库连接信息到 MiniProfiler 中，bool 类型，默认 true
    //  SupportPackageNamePrefixs：配置支持的包前缀名，string[] 类型，默认 []
    //  OutputOriginalSqlExecuteLog：是否输出原始 Sql 执行日志（ADO.NET），默认 true
    //  VirtualPath：配置虚拟目录，必须以 / 开头
    "InjectSpecificationDocument": false,
    "InjectMiniProfiler": false
  },
  //  Swagger文档配置 ------------------------------------------------------------------------------
  "SpecificationDocumentSettings": {
    //  DocumentTitle：文档标题，string，默认 Specification Api Document
    //  DefaultGroupName：默认分组名，string，默认 Default
    //  EnableAuthorized：是否启用权限控制，bool，默认 true
    //  FormatAsV2：采用 Swagger 2.0 版本，bool，默认 false 已弃用
    //  RoutePrefix：规范化文档地址，string，默认 api，如果希望在首页，改为空字符串即可。
    //  DocExpansionState：文档显示方式，DocExpansion，默认 List，取值：
    //  List：列表式（展开子类），默认值
    //  Full：完全展开
    //  None：列表式（不展开子类）
    //  XmlComments：程序集注释描述文件名（可带 .xml，string，默认 Furion.Application, Furion.Web.Entry, Furion.Web.Core
    //  GroupOpenApiInfos：分组信息配置，SpecificationOpenApiInfo[]，默认 { 'Group': 'Default'}
    //  SecurityDefinitions：安全策略定义配置，SpecificationOpenApiSecurityScheme[]，默认 []
    //  Servers：配置 Server 下拉列表，OpenApiServer[] 类型，默认 []，如：{Servers:[ { Url:"地址", Description:"描述"} ]}
    //  HideServers：是否隐藏 Server 下拉列表，bool 类型，默认 true
    //  RouteTemplate：配置文档 swagger.json 路由模板，默认模板：swagger/{documentName}/swagger.json, {documentName} 代表分组名，必须保留原样
    //  PackagesGroups：配置模块化内置分组名称，string[] 类型，默认 []
    //  EnableEnumSchemaFilter：启用枚举 Schema 筛选器，bool 类型，默认 true
    //  EnableTagsOrderDocumentFilter：启用标签排序筛选器，bool 类型，默认 true
    //  ServerDir：配置 IIS 添加 Application 部署名，string 类型，默认空，仅在 Furion v3.2.0+` 有效
    //  LoginInfo：配置 Swagger 是否需要登录才能访问，SpecificationLoginInfo 类型，默认 null，仅在 Furion v3.3.3+` 有效
    //  Enabled：是否启用登录授权，默认 false
    //  CheckUrl：检查登录状态的 Url 地址，该地址必须是 POST 请求，已授权返回 200，否则返回 401
    //  SubmitUrl：提交登录的 Url 地址，该地址必须是 POST 请求且只有一个 SpecificationAuth 类型参数，成功登录返回 200，否则返回 401，支持相对地址，以 / 开头
    //  EnableAllGroups：启用 Swagger 总分组功能，自动将所有分组的接口合并到 All Groups 中，bool 类型，默认 false，仅在 Furion v3.3.4+` 有效
    //  另外 SpecificationOpenApiInfo 内置配置如下：
    //
    //  Group：分组唯一标识，string 类型，必填
    //  Order：分组排序，int 类型，数字越大排前面，默认 0
    //  Visible：配置分组是否可见，bool 类型，默认 true
    //  Title：配置分组标题，string 类型
    //  Description：配置分组描述，string 类型
    //  Version：配置分组版本，默认 1.0
    //  TermsOfService：配置相关链接地址，Uri 类型
    //  Contact：配置联系方式，OpenApiContact 类型
    //  License：配置协议，OpenApiLicense 类型
    "EnableEnumSchemaFilter": false,
    "EnableAuthorized": false,
    "RoutePrefix": "swagger",
    "XmlComments": [
      "FreeSql.xml",
      "NetAdmin.Application.xml",
      "NetAdmin.BizServer.Application.xml",
      "NetAdmin.BizServer.Cache.xml",
      "NetAdmin.BizServer.Host.xml",
      "NetAdmin.Cache.xml",
      "NetAdmin.Domain.xml",
      "NetAdmin.Host.xml",
      "NetAdmin.Infrastructure.xml",
      "NetAdmin.ScheduledService.xml",
      "NetAdmin.SysComponent.Application.xml",
      "NetAdmin.SysComponent.Cache.xml",
      "NetAdmin.SysComponent.Host.xml",
    ]
  },
  // 验证码配置 --------------------------------------------------------------------------------------------------------
  "Captcha": {
    "ImageRelativePath": ".data/captcha",
    "SecretKey": "1Z?f(2)%v?:X5NYRl+]PSi.rDf7Ip#lB"
  },
  // 跨域配置 ----------------------------------------------------------------------------------------------------------
  "CorsAccessorSettings": {
    //  CorsAccessorSettings
    //  PolicyName：跨域策略名，string 类型，必填，默认 App.Cors.Policy
    //  WithOrigins：允许跨域的域名列表，string[] 类型，默认 *
    //  WithHeaders：请求表头，没有配置则允许所有表头，string[] 类型
    //  WithExposedHeaders：设置客户端可获取的响应标头，string[] 类型，默认 ["access-token", "x-access-token"]
    //  WithMethods：设置跨域允许请求谓词，没有配置则允许所有，string[] 类型
    //  AllowCredentials：是否允许跨域请求中的凭据，bool 类型，默认值 true
    //  SetPreflightMaxAge：设置预检过期时间，int 类型，默认值 24小时
    //  FixedClientToken：是否默认配置 WithExposedHeaders，bool 类型，默认 true
    //  SignalRSupport：是否启用 SignalR 跨域支持，bool 类型，默认 false
    "WithExposedHeaders": [
      "access-token",
      "x-access-token",
      "content-disposition"
    ]
  },
  // 数据库配置 --------------------------------------------------------------------------------------------------------
  "Database": {
    "DbType": "Sqlite",
    "ConnStr": "data source=NetAdmin.db",
    "SeedDataRelativePath": "SeedData"
  },
  // 动态webapi配置 ----------------------------------------------------------------------------------------------------
  "DynamicApiControllerSettings": {
    //  5.1.10 DynamicApiControllerSettings 配置
    //  Furion 还提供动态 WebAPI 接口一些全局配置选项，如：
    //
    //  DefaultRoutePrefix：默认路由前缀，string，默认 api
    //  DefaultHttpMethod：默认请求谓词，string，默认：POST
    //  DefaultModule：默认模块名称（区域），可用作接口版本，string，默认：v1
    //  LowercaseRoute：小写路由格式，bool，默认：true
    //  AsLowerCamelCase：启用小驼峰命名（首字母小写），默认 false
    //  KeepVerb：是否保留动作谓词，bool，默认：false
    //  KeepName：是否保留默认名称，bool，默认：fasle
    //  CamelCaseSeparator：骆驼(驼峰)/帕斯卡命名分隔符，string，默认：-
    //  VersionSeparator：版本分隔符，string，默认：@
    //  ModelToQuery：GET/HEAD 请求将 类类型参数转查询参数，bool，默认 false
    //  SupportedMvcController：是否支持 Mvc Controller 动态配置，bool，默认 false
    //  UrlParameterization：路由参数采用 [FromQuery] 化，默认 false（[FromRoute] 方式）
    //  DefaultArea：配置默认区域，默认 null
    //  ForceWithRoutePrefix：配置是否强制添加 DefaultRoutePrefix，当控制器自定义了 [Route] 有效，仅限 v3.4.1+版本有效
    //  AbandonControllerAffixes：默认去除控制器名称前后缀列表名，string[]，默认：
    //  AppServices
    //  AppService
    //  ApiController
    //  Controller
    //  Services
    //  Service
    //  AbandonActionAffixes：默认去除动作方法名称前后缀列表名，string[]，默认：
    //  Async
    //  VerbToHttpMethods：复写默认方法名转 [HttpMethod] 规则，string[][] 二维数组类型，内置匹配规则为：
    //  ["post"] = "POST",
    //  ["add"] = "POST",
    //  ["create"] = "POST",
    //  ["insert"] = "POST",
    //  ["submit"] = "POST",
    //  ["get"] = "GET",
    //  ["find"] = "GET",
    //  ["fetch"] = "GET",
    //  ["query"] = "GET",
    //  ["getlist"] = "GET",
    //  ["getall"] = "GET",
    //  ["put"] = "PUT",
    //  ["update"] = "PUT",
    //  ["delete"] = "DELETE",
    //  ["remove"] = "DELETE",
    //  ["clear"] = "DELETE",
    //  ["patch"] = "PATCH"
    //
    //  复写示例
    //  "DynamicApiControllerSettings": {
    //  "VerbToHttpMethods": [
    //  [ "getall", "HEAD" ],  // => getall 会被复写为 `[HttpHead]`
    //  [ "other", "PUT" ]  // => 新增一条新规则，比如，一 `[other]` 开头会转换为 `[HttpPut]` 请求
    //  ]
    //  }
    //        "DefaultRoutePrefix": "rest",
    "VerbToHttpMethods": [
      [
        "post",
        "POST"
      ],
      [
        "add",
        "POST"
      ],
      [
        "create",
        "POST"
      ],
      [
        "insert",
        "POST"
      ],
      [
        "submit",
        "POST"
      ],
      [
        "get",
        "POST"
      ],
      [
        "find",
        "POST"
      ],
      [
        "fetch",
        "POST"
      ],
      [
        "query",
        "POST"
      ],
      [
        "getlist",
        "POST"
      ],
      [
        "getall",
        "POST"
      ],
      [
        "put",
        "POST"
      ],
      [
        "update",
        "POST"
      ],
      [
        "delete",
        "POST"
      ],
      [
        "remove",
        "POST"
      ],
      [
        "clear",
        "POST"
      ],
      [
        "patch",
        "POST"
      ]
    ],
    "CamelCaseSeparator": ".",
    "UrlParameterization": true,
    "KeepVerb": true,
    "AbandonControllerAffixes": [
      "Controller"
    ],
  },
  // 友好异常配置 -------------------------------------------------------------------------------------------------------
  "FriendlyExceptionSettings": {
    //  7.15 FriendlyExceptionSettings 配置
    //        HideErrorCode：隐藏错误码，bool 类型，默认 false
    //        DefaultErrorCode：默认错误码，string 类型
    //        DefaultErrorMessage：默认错误消息，string 类型
    //        ThrowBah：是否将 Oops.Oh 默认抛出为业务异常，bool 类型，默认 false，设置 true 之后 Oops.Oh 默认进入 OnValidateFailed 处理，而不是 OnException
    //        LogError：是否输出异常日志，bool 类型，默认 true
    "LogError": false
  },
  // JWT鉴权配置 -------------------------------------------------------------------------------------------------------
  "JWTSettings": {
    "ValidateIssuerSigningKey": true,
    // 是否验证密钥，bool 类型，默认true
    "IssuerSigningKey": "bO0BCAGxpxYnm6AE4XpgO25T27NayFzjGgfDqBuzUzD6ROpFiZUi3KjVg93bdGek",
    // 密钥，string 类型，必须是复杂密钥，长度大于16
    "ValidateIssuer": true,
    // 是否验证签发方，bool 类型，默认true
    "ValidIssuer": "签发方",
    // 签发方，string 类型
    "ValidateAudience": true,
    // 是否验证签收方，bool 类型，默认true
    "ValidAudience": "签收方",
    // 签收方，string 类型
    "ValidateLifetime": true,
    // 是否验证过期时间，bool 类型，默认true，建议true
    "ExpiredTime": 20,
    // 过期时间，long 类型，单位分钟，默认20分钟
    "ClockSkew": 5,
    // 过期时间容错值，long 类型，单位秒，默认 5秒
    "Algorithm": "HS256"
    // 加密算法，string 类型，默认 HS256
  },
  // 日志配置 ----------------------------------------------------------------------------------------------------------
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning",
      "System.Logging.EventBusService": "Error"
    },
    "Monitor": {
      "GlobalEnabled": false,
      // 是否启用全局拦截，默认 `false`
      //      "IncludeOfMethods": [], // 是否指定拦截特定方法，当 GlobalEnabled: false 有效
      //      "ExcludeOfMethods": [], // 是否指定排除特定方法，当 GlobalEnabled: true 有效
      //      "BahLogLevel": "Information", // 配置 Oops.Oh 和 Oops.Bah 业务日志输出级别，默认 Information
      //      "WithReturnValue": true, // 配置是否包含返回值，默认 `true`，Furion 4.3.9+ 有效
      "ReturnValueThreshold": 1000
      // 配置返回值字符串阈值，默认 0，全量输出，Furion 4.3.9+ 有效
      //      "JsonBehavior": "None", // 配置 LoggingMonitor Json 输出行为，默认 None，Furion 4.5.2+ 有效
      //      "MethodsSettings": [
      //        // 配置被监视方法更多信息，Furion 4.3.9+ 有效
      //        {
      //          "FullName": "Furion.Application.TestLoggerServices.MethodName", // 方法完全限定名
      //          "WithReturnValue": true, // 配置是否包含返回值，默认 `true`，Furion 4.3.9+ 有效
      //          "ReturnValueThreshold": 0 // 配置返回值字符串阈值，默认 0，全量输出，Furion 4.3.9+ 有效
      //        }
      //      ]
    }
  },
  // Redis配置 --------------------------------------------------------------------------------------------------------
  "Redis": {
    "Instances": [
      // 数据缓存
      {
        "Name": "DataCache",
        "ConnStr": "localhost:6379",
        "Database": 0
      }
    ]
  },
  // UnifyResultSettings 规范化配置 ------------------------------------------------------------------------------------
  "UnifyResultSettings": {
    //  Return200StatusCodes：配置返回 200 状态码的请求，int[] 类型，只支持 400+(404除外) 状态码篡改
    //  AdaptStatusCodes：配置篡改状态码规则，int[][] 类型，只支持 400+(404除外) 状态码篡改
    //  SupportMvcController：是否支持 MVC 控制台规范化处理，bool 类型，默认 false
    "Return200StatusCodes": [
      999
    ],
  },
  // 文件上传配置 -------------------------------------------------------------------------------------------------------
  "Upload": {
    "ContentTypes": [
      "image/jpg",
      "image/png",
      "image/jpeg",
      "image/gif"
    ],
    "MaxSize": 1073741824,
    "Minio": {
      "ServerAddress": "vm-ubt-1:9000",
      "AccessKey": "nVMM0gSqwyIjM8iZ",
      "SecretKey": "F8OZngGrNsZSYn4MP9swwMSf5rfm61EC",
      "BucketName": "net-admin",
      "AccessUrl": "http://vm-ubt-1:9000",
      "Secure": false,
    }
  },
}