Skip to content
Promote Your Product

Configuration

Namespace: ZhonTai.Admin.Core.Configs

The main configuration file is appconfig.json, mapped to the AppConfig class. Additional configurations exist for database, JWT, email, OSS, cache, rate limiting, etc.

AppConfig Main Configuration

Config file: Configs/appconfig.json

Settings

SettingTypeDescription
AppTypestringApplication type: Controllers / ControllersWithViews / MVC
Urlsstring[]Listen URL list, e.g. [ "http://*:18010" ]
CorUrlsstring[]CORS URL list
AssemblyNamesstring[]Assembly names to scan
EnumListAssemblyNamesstring[]Enum list assembly names
TenantboolEnable multi-tenancy
DistributeKeystringDistributed transaction unique identifier, empty means no distributed transaction tables
DefaultPasswordstringDefault password
LangobjectLanguage configuration
Lang.EnableJsonboolEnable language configuration
Lang.DefaultLangstringDefault language, e.g. zh-CN
Lang.Langsstring[]Supported language list
Lang.RequestCultureProvidersstring[]Language request providers: QueryString, Cookie, AcceptLanguageHeader
ValidateobjectValidation configuration
Validate.LoginboolEnable login validation
Validate.PermissionboolEnable permission validation
Validate.DataPermissionboolEnable data permissions
Validate.ApiDataPermissionboolEnable API-level data permissions
AopobjectAOP configuration
Aop.TransactionboolEnable declarative transactions
SwaggerobjectSwagger configuration
Swagger.EnableboolEnable Swagger
Swagger.EnableEnumSchemaFilterboolEnable enum schema filter
Swagger.EnableOrderTagsDocumentFilterboolEnable API ordering document filter
Swagger.EnableJsonStringEnumConverterboolEnable enum property names
Swagger.EnableSchemaIdNamespaceboolEnable SchemaId namespace
Swagger.AssemblyNameListstring[]Assembly list for SchemaId namespace
Swagger.RoutePrefixstringRoute prefix, e.g. doc/module/swagger for microservice docs
Swagger.UrlstringSwagger URL
Swagger.Projectsobject[]Swagger project group list
ApiUIobjectNew API UI configuration
ApiUI.EnableboolEnable API UI
ApiUI.RoutePrefixstringRoute prefix
ApiUI.FooterobjectFooter configuration
MiniProfilerboolEnable MiniProfiler performance analyzer
LogobjectLog configuration
Log.OperationboolEnable operation logging
Log.MethodstringLog recording method: Grpc / Cap
RateLimitboolEnable rate limiting
VarifyCodeobjectCaptcha configuration
VarifyCode.EnableboolEnable captcha
VarifyCode.Fontsstring[]Font list
DynamicApiobjectDynamic API configuration
DynamicApi.FormatResultboolEnable result formatting
PasswordHasherboolImplement standard identity password hashing
KestrelobjectKestrel server configuration
Kestrel.KeepAliveTimeoutintHTTP keep-alive timeout (seconds)
Kestrel.RequestHeadersTimeoutintRequest headers timeout (seconds)
Kestrel.MaxRequestBodySizelongMax request body size (bytes), null for unlimited
HealthChecksobjectHealth check configuration
HealthChecks.EnableboolEnable health checks
HealthChecks.PathstringHealth check path
PreflightMaxAgeintCORS preflight max age (seconds), default 1800
TaskSchedulerUIobjectTask scheduler UI configuration
TaskSchedulerUI.EnableboolEnable task scheduler UI
TaskSchedulerUI.PathstringAccess path
IdGeneratorobjectID generator configuration
IdGenerator.DataCenterIdintData center ID
IdGenerator.WorkerIdintWorker ID, must be globally unique
IdGenerator.WorkerIdBitLengthintWorker ID bit length, default 6
IdGenerator.SeqBitLengthintSequence bit length, default 6
IdGenerator.CachePrefixstringCache prefix
IP2RegionobjectIP address geolocation configuration
IP2Region.EnableboolEnable IP geolocation
IP2Region.DbPathstringAbsolute database path, defaults to ip2region.xdb in web root

Configuration Example

json
{
  "AppConfig": {
    "appType": "Controllers",
    "urls": [ "http://*:18010" ],
    "corUrls": [],
    "assemblyNames": [ "ZhonTai.Admin.Core", "ZhonTai.Module.Admin" ],
    "EnumListAssemblyNames": [],
    "tenant": true,
    "distributeKey": "",
    "validate": {
      "login": true,
      "permission": true,
      "dataPermission": true,
      "apiDataPermission": true
    },
    "swagger": {
      "enable": true,
      "enableEnumSchemaFilter": true,
      "enableOrderTagsDocumentFilter": true,
      "enableJsonStringEnumConverter": false,
      "enableSchemaIdNamespace": false,
      "assemblyNameList": [],
      "routePrefix": "doc/sys/swagger",
      "url": "http://localhost:18010",
      "projects": [
        {
          "name": "ZhonTai Admin",
          "code": "admin",
          "version": "v10.0.1",
          "description": "Permission Management"
        }
      ]
    },
    "apiUI": {
      "enable": true,
      "routePrefix": "doc/sys",
      "footer": {
        "enable": false,
        "content": ""
      }
    },
    "miniProfiler": false,
    "aop": {
      "transaction": true
    },
    "log": {
      "operation": true,
      "method": "Grpc"
    },
    "rateLimit": false,
    "varifyCode": {
      "enable": true,
      "fonts": [ "Times New Roman", "Verdana", "Arial", "Gungsuh", "Impact" ]
    },
    "defaultPassword": "123asd",
    "dynamicApi": {
      "formatResult": true
    },
    "passwordHasher": false,
    "Kestrel": {
      "KeepAliveTimeout": 600,
      "RequestHeadersTimeout": 600,
      "maxRequestBodySize": 104857600
    },
    "healthChecks": {
      "enable": true,
      "path": "/health"
    },
    "PreflightMaxAge": 1800,
    "TaskSchedulerUI": {
      "enable": true,
      "path": "/task"
    },
    "IdGenerator": {
      "DataCenterId": 0,
      "WorkerId": 1,
      "WorkerIdBitLength": 6,
      "SeqBitLength": 6,
      "CachePrefix": "zhontai:workerid"
    },
    "IP2Region": {
      "Enable": true,
      "DbPath": ""
    },
    "Lang": {
      "EnableJson": true,
      "DefaultLang": "zh-CN",
      "Langs": [ "zh-CN", "en" ],
      "RequestCultureProviders": []
    }
  }
}

DbConfig Database Configuration

Config file: Configs/dbconfig.json

Settings

SettingTypeDescription
KeystringDatabase registration key (e.g. AdminDb, LogDb)
TypestringDatabase type: MySql / SqlServer / PostgreSQL / Sqlite / Oracle / TiDB etc.
ConnectionStringstringConnection string
AssemblyNamesstring[]Assembly names to auto-load entities, empty for custom ConfigureFreeSql
IncludeEntityDbsstring[]Include entity database list, empty means all
ExcludeEntityDbsstring[]Exclude entity database list
MonitorCommandboolMonitor all commands
CurdboolMonitor CRUD operations
SyncStructureSqlboolMonitor sync structure SQL
SyncDataCurdboolMonitor sync data CRUD
CreateDbboolCreate database
CreateDbConnectionStringstringCreate database connection string
CreateDbSqlstringCreate database SQL script
SyncStructureboolAuto-sync table structure
SyncStructureEntityBatchSizeintSync structure entity batch size
SyncDataBatchSizeintSync data batch size, default 500, too large may cause OOM
SyncDataboolAuto-sync seed data
SyncUpdateDataboolSync update data, use with caution in production
SyncDataPathstringSync data path
SyncDataIncludeTablesstring[]Include tables for sync
SyncDataExcludeTablesstring[]Exclude tables from sync
SyncDataUserobjectSync data user
GenerateDataboolGenerate seed data package, remember to disable after use
ProviderTypestringCustom provider assembly
SlaveListobject[]Read-write separation slave list
IdleTimeintIdle time (minutes), 0 means no auto-recycle
ForceUpdateboolForce update EntityUpdate data on insert
Dbsobject[]Multiple database configs

Configuration Example

json
{
  "DbConfig": {
    "key": "sysdb",
    "assemblyNames": [ "ZhonTai.Admin" ],
    "type": "MySql",
    "connectionString": "Server=localhost;Port=3306;Database=sysdb;Uid=root;Pwd=pwd;Charset=utf8mb4;Min pool size=1;Allow User Variables=True",
    "createDb": true,
    "createDbConnectionString": "Server=localhost;Port=3306;Database=mysql;Uid=root;Pwd=pwd;Charset=utf8mb4;Min pool size=1;Allow User Variables=True",
    "createDbSql": "CREATE DATABASE `sysdb` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci'",
    "syncStructure": true,
    "syncStructureEntityBatchSize": 1,
    "syncDataBatchSize": 500,
    "syncData": true,
    "syncUpdateData": false,
    "SyncDataPath": "InitData/App",
    "syncDataIncludeTables": [],
    "syncDataExcludeTables": [],
    "syncDataUser": {
      "id": 161223411986501,
      "userName": "admin",
      "name": "Admin",
      "tenantId": 161223412138053
    },
    "generateData": false,
    "idleTime": 1440,
    "forceUpdate": false,
    "dbs": [
      {
        "key": "admindb",
        "assemblyNames": [ "ZhonTai.Admin" ],
        "type": "MySql",
        "connectionString": "Server=localhost;Port=3306;Database=admindb;Uid=root;Pwd=pwd;Charset=utf8mb4;Min pool size=1;Allow User Variables=True"
      },
      {
        "key": "logdb",
        "assemblyNames": [ "ZhonTai.Admin" ],
        "includeEntityDbs": [ "Log" ],
        "type": "MySql",
        "connectionString": "Server=localhost;Port=3306;Database=logdb;Uid=root;Pwd=pwd;Charset=utf8mb4;Min pool size=1;Allow User Variables=True"
      }
    ]
  }
}

JwtConfig JWT Configuration

Config file: Configs/jwtconfig.json

Settings

SettingTypeDescription
IssuerstringToken issuer
AudiencestringToken audience
SecurityKeystringSecret key (custom)
ExpiresintAccess Token expiry (minutes), 120 = 2 hours
RefreshExpiresintRefresh Token expiry (minutes), 1440 = 1 day

Configuration Example

json
{
  "JwtConfig": {
    "issuer": "admin.core",
    "audience": "admin.core",
    "securityKey": "73A74C69E2CF4522A7C69375CA0354D8",
    "expires": 120,
    "refreshExpires": 1440
  }
}

EmailConfig Email Configuration

Config file: Email section in Configs/appsettings.json

Settings

SettingTypeDescription
HoststringSMTP host, e.g. smtp.qq.com
PortintPort number, e.g. 465, 587, 25
UseSslboolUse SSL
UserNamestringEmail account
PasswordstringEmail password
FromEmailobjectSender information
FromEmail.NamestringSender name
FromEmail.AddressstringSender address
ToEmailobjectRecipient information
ToEmail.NamestringRecipient name
ToEmail.AddressstringRecipient address

Configuration Example

json
{
  "Email": {
    "Host": "smtp.qq.com",
    "Port": 465,
    "UseSsl": true,
    "UserName": "",
    "Password": "",
    "FromEmail": {
      "Name": "",
      "Address": ""
    },
    "ToEmail": {
      "Name": "",
      "Address": ""
    }
  }
}

OSSConfig OSS File Upload Configuration

Config file: Configs/ossconfig.json

Settings

SettingTypeDescription
LocalUploadConfigobjectLocal upload configuration
LocalUploadConfig.DirectorystringUpload directory
LocalUploadConfig.DateTimeDirectorystringDate directory format, e.g. yyyy/MM/dd
LocalUploadConfig.Md5boolEnable MD5 verification
LocalUploadConfig.MaxSizelongMax file size (bytes)
LocalUploadConfig.IncludeExtensionstring[]Included file extension list
LocalUploadConfig.ExcludeExtensionstring[]Excluded file extension list, e.g. [ ".exe", ".dll", ".jar" ]
ProviderstringDefault storage provider
OSSConfigsobject[]OSS configuration list

Supported Providers: Minio, Aliyun, QCloud (Tencent Cloud), Qiniu, HuaweiCloud.

Each OSS configuration:

SettingTypeDescription
ProviderstringProvider type
EndpointstringEndpoint URL
RegionstringRegion
AccessKeystringAccess key
SecretKeystringSecret key
IsEnableHttpsboolEnable HTTPS
IsEnableCacheboolEnable cache
BucketNamestringBucket name
UrlstringFile external URL
Md5boolEnable MD5 verification
EnableboolEnable this provider

Configuration Example

json
{
  "OssConfig": {
    "LocalUploadConfig": {
      "Directory": "upload",
      "DateTimeDirectory": "yyyy/MM/dd",
      "Md5": false,
      "MaxSize": 104857600,
      "IncludeExtension": [],
      "ExcludeExtension": [ ".exe", ".dll", ".jar" ]
    },
    "Provider": "Minio",
    "OSSConfigs": [
      {
        "Provider": "Minio",
        "Endpoint": "127.0.0.1:9006",
        "Region": "",
        "AccessKey": "minio",
        "SecretKey": "minio",
        "IsEnableHttps": false,
        "IsEnableCache": true,
        "BucketName": "admin",
        "Url": "",
        "Md5": false,
        "Enable": false
      }
    ]
  }
}

RpcConfig RPC Configuration

Config file: RpcConfig section in Configs/appsettings.json

Settings

SettingTypeDescription
HttpobjectHTTP remote configuration
Http.EnableboolEnable HTTP remote calls, default true
Http.AssemblyNamesstring[]Client assembly name list, auto-includes ZhonTai.Admin.Contracts if not specified
GrpcobjectgRPC remote configuration
Grpc.EnableboolEnable gRPC remote calls, default true
Grpc.AssemblyNamesstring[]Client assembly name list, auto-includes ZhonTai.Admin.Core if not specified
Grpc.ServerAssemblyNamesstring[]Server assembly name list
Endpointsobject[]Remote endpoint list
Endpoints[].NamestringModule name, e.g. admin
Endpoints[].HttpUrlstringHTTP URL, e.g. http://localhost:18010
Endpoints[].GrpcUrlstringgRPC URL, e.g. http://localhost:18011

Configuration Example

json
{
  "RpcConfig": {
    "Http": {
      "Enable": true,
      "AssemblyNames": [ "ZhonTai.Admin.Contracts" ]
    },
    "Grpc": {
      "Enable": true,
      "AssemblyNames": [ "ZhonTai.Admin.Core" ],
      "ServerAssemblyNames": [ "ZhonTai.Admin" ]
    },
    "Endpoints": [
      {
        "Name": "admin",
        "HttpUrl": "http://localhost:18010",
        "GrpcUrl": "http://localhost:18011"
      }
    ]
  }
}

ImConfig IM Configuration

Config file: ImConfig section in Configs/appsettings.json

Settings

SettingTypeDescription
EnableboolEnable instant messaging, default false
Serversstring[]IM server cluster address list, e.g. [ "127.0.0.1:17010" ]
ServerstringWebSocket business endpoint, e.g. ws://127.0.0.1:17010
RedisConnectionStringstringRedis connection string, e.g. 127.0.0.1:6379,password=,defaultDatabase=6

Configuration Example

json
{
  "ImConfig": {
    "Enable": false,
    "Servers": [ "127.0.0.1:17010" ],
    "Server": "ws://127.0.0.1:17010",
    "RedisConnectionString": "127.0.0.1:6379,password=,defaultDatabase=6"
  }
}

TaskSchedulerConfig Task Scheduler Configuration

Config file: TaskScheduler section in Configs/appsettings.json

Settings

SettingTypeDescription
ProcessStartInfoobjectProcess startup information
ProcessStartInfo.FileNamestringApplication path, e.g. C:/grpcurl_1.8.7/grpcurl
ProcessStartInfo.WorkingDirectorystringWorking directory
AlerEmailobjectAlert email configuration
AlerEmail.EnableboolEnable alert emails
AlerEmail.AddressstringAlert email address
Modulesobject[]Module list
Modules[].NamestringModule name, e.g. admin
Modules[].HttpUrlstringHTTP URL, e.g. http://localhost:18010
Modules[].GrpcUrlstringgRPC URL, e.g. http://localhost:18011

Configuration Example

json
{
  "TaskScheduler": {
    "ProcessStartInfo": {
      "FileName": "C:/grpcurl_1.8.7/grpcurl",
      "WorkingDirectory": ""
    },
    "AlerEmail": {
      "Enable": true,
      "Address": ""
    },
    "Modules": [
      {
        "Name": "admin",
        "HttpUrl": "http://localhost:18010",
        "GrpcUrl": "http://localhost:18011"
      }
    ]
  }
}

RateLimitConfig Rate Limiting Configuration

Config file: Configs/ratelimitconfig.json

Settings

SettingTypeDescription
EnableboolEnable rate limiting
MethodstringRate limit method: Client (client limiting) / Ip (IP limiting)
ClientIdTypestringClient ID type: Token / UserId / ClientIdHeader
CachePrefixstringCache prefix
IpRateLimitingobjectIP rate limiting configuration
IpRateLimiting.EnableEndpointRateLimitingboolEnable endpoint rate limiting
IpRateLimiting.StackBlockedRequestsboolStack blocked requests
IpRateLimiting.RealIpHeaderstringReal IP header
IpRateLimiting.IpWhiteliststring[]IP whitelist
IpRateLimiting.EndpointWhiteliststring[]Endpoint whitelist
IpRateLimiting.ClientWhiteliststring[]Client whitelist
IpRateLimiting.HttpStatusCodeintHTTP status code when limited
IpRateLimiting.QuotaExceededResponseobjectQuota exceeded response content
IpRateLimiting.GeneralRulesobject[]General rate limiting rules
ClientRateLimitingobjectClient rate limiting configuration
ClientRateLimiting.EnableEndpointRateLimitingboolEnable endpoint rate limiting
ClientRateLimiting.ClientIdHeaderstringClient ID header
ClientRateLimiting.IpWhiteliststring[]IP whitelist
ClientRateLimiting.EndpointWhiteliststring[]Endpoint whitelist
ClientRateLimiting.ClientWhiteliststring[]Client whitelist
ClientRateLimiting.HttpStatusCodeintHTTP status code when limited
ClientRateLimiting.QuotaExceededResponseobjectQuota exceeded response content
ClientRateLimiting.GeneralRulesobject[]General rate limiting rules

Configuration Example

json
{
  "RateLimitConfig": {
    "Enable": false,
    "Method": "Client",
    "ClientIdType": "Token",
    "CachePrefix": "zhontai:ratelimit",
    "IpRateLimiting": {
      "EnableEndpointRateLimiting": true,
      "StackBlockedRequests": false,
      "RealIpHeader": "X-Real-IP",
      "IpWhitelist": [],
      "EndpointWhitelist": [
        "get:/api/admin/auth/refresh",
        "*:/*.*GrpcService/*"
      ],
      "ClientWhitelist": [],
      "HttpStatusCode": 429,
      "QuotaExceededResponse": {
        "Content": "{\"code\":429,\"msg\":\"Too many requests!\",\"success\": false}",
        "ContentType": "application/json; charset=utf-8",
        "StatusCode": 429
      },
      "GeneralRules": [
        {
          "Endpoint": "*:/api/*",
          "Period": "1s",
          "Limit": 3
        },
        {
          "Endpoint": "*:/api/*",
          "Period": "10m",
          "Limit": 200
        }
      ]
    },
    "ClientRateLimiting": {
      "EnableEndpointRateLimiting": true,
      "ClientIdHeader": "X-ClientId",
      "IpWhitelist": [],
      "EndpointWhitelist": [
        "get:/api/admin/auth/refresh",
        "*:/*.*GrpcService/*"
      ],
      "ClientWhitelist": [],
      "HttpStatusCode": 429,
      "QuotaExceededResponse": {
        "Content": "{\"code\":429,\"msg\":\"Too many requests!\",\"success\": false}",
        "ContentType": "application/json; charset=utf-8",
        "StatusCode": 429
      },
      "GeneralRules": [
        {
          "Endpoint": "*:/api/*",
          "Period": "1s",
          "Limit": 3
        },
        {
          "Endpoint": "*:/api/*",
          "Period": "10m",
          "Limit": 200
        }
      ]
    }
  }
}