From 0f0aa4ef34e41df88a0ac5fa8f93fb8a2b8aa333 Mon Sep 17 00:00:00 2001 From: xiaochanghai Date: Wed, 17 Apr 2024 13:10:31 +0800 Subject: [PATCH] =?UTF-8?q?SimpleDapper=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/SimpleDapper.dll | Bin 0 -> 152064 bytes Tiobon.Core.Api/Controllers/TestController.cs | 26 + Tiobon.Core.Api/Program.cs | 2 + Tiobon.Core.Api/Tiobon.Core.Api.csproj | 6 + Tiobon.Core.Api/Tiobon.Core.xml | 5 + .../Common_Test/DbAccess_Should.cs | 27 + Tiobon.Core.Tests/Tiobon.Core.Tests.csproj | 15 +- Tiobon.Core.Tests/appsettings.json | 658 +++++++++--------- 8 files changed, 417 insertions(+), 322 deletions(-) create mode 100644 Lib/SimpleDapper.dll create mode 100644 Tiobon.Core.Api/Controllers/TestController.cs create mode 100644 Tiobon.Core.Tests/Common_Test/DbAccess_Should.cs diff --git a/Lib/SimpleDapper.dll b/Lib/SimpleDapper.dll new file mode 100644 index 0000000000000000000000000000000000000000..d02f3c7430e097f7525e97a05be5d79ec2fa270b GIT binary patch literal 152064 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

FC^@)7p=$@`rppYeB*CEw{kBi;$mPVD$; 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 literal 0 HcmV?d00001 diff --git a/Tiobon.Core.Api/Controllers/TestController.cs b/Tiobon.Core.Api/Controllers/TestController.cs new file mode 100644 index 00000000..696f6894 --- /dev/null +++ b/Tiobon.Core.Api/Controllers/TestController.cs @@ -0,0 +1,26 @@ +using System.Data; +using SimpleDapper; + +namespace Tiobon.Core.Api.Controllers; + +///

+/// Ghra_Grade +/// +[Route("api/[controller]")] +[ApiController, GlobalActionFilter] +[Authorize(Permissions.Name), ApiExplorerSettings(GroupName = Grouping.GroupName_Ghra)] +public class TestController : BaseController +{ + public TestController(IGhra_GradeServices service) : base(service) + { + } + + [HttpGet] + public async Task Test() + { + + string sql = "SELECT * FROM Ghra_Grade"; + DataTable dt = await DbAccess.GetDataTableAsync(sql); + return Success(); + } +} \ No newline at end of file diff --git a/Tiobon.Core.Api/Program.cs b/Tiobon.Core.Api/Program.cs index 5b70419c..aa09e857 100644 --- a/Tiobon.Core.Api/Program.cs +++ b/Tiobon.Core.Api/Program.cs @@ -9,6 +9,7 @@ using Microsoft.IdentityModel.Logging; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Serialization; using Serilog; +using SimpleDapper.Extensions; using Tiobon.Core; using Tiobon.Core.Common.Core; using Tiobon.Core.Extensions; @@ -55,6 +56,7 @@ builder.Services.AddCacheSetup(); builder.Services.AddSqlsugarSetup(); builder.Services.AddDbSetup(); builder.Services.AddInitializationHostServiceSetup(); +builder.Services.AddSimpleDapperSetup(); builder.Host.AddSerilogSetup(); diff --git a/Tiobon.Core.Api/Tiobon.Core.Api.csproj b/Tiobon.Core.Api/Tiobon.Core.Api.csproj index cfa633c2..41dd1685 100644 --- a/Tiobon.Core.Api/Tiobon.Core.Api.csproj +++ b/Tiobon.Core.Api/Tiobon.Core.Api.csproj @@ -108,6 +108,12 @@ + + + ..\Lib\SimpleDapper.dll + + + diff --git a/Tiobon.Core.Api/Tiobon.Core.xml b/Tiobon.Core.Api/Tiobon.Core.xml index 628d91ba..04ebdb87 100644 --- a/Tiobon.Core.Api/Tiobon.Core.xml +++ b/Tiobon.Core.Api/Tiobon.Core.xml @@ -1593,6 +1593,11 @@ + + + Ghra_Grade + + 全局请求验证 diff --git a/Tiobon.Core.Tests/Common_Test/DbAccess_Should.cs b/Tiobon.Core.Tests/Common_Test/DbAccess_Should.cs new file mode 100644 index 00000000..75d9404e --- /dev/null +++ b/Tiobon.Core.Tests/Common_Test/DbAccess_Should.cs @@ -0,0 +1,27 @@ +using System.Data; +using SimpleDapper; +using Tiobon.Core.Model.Models; +using Xunit; + +namespace Tiobon.Core.Tests.Common_Test +{ + public class DbAccess_Should + { + + [Fact] + public async void Test() + { + AppSetting.Init(); + + string sql = "SELECT * FROM Ghra_Grade"; + DataTable dt = await DbAccess.GetDataTableAsync(sql); + + //var list = await DbAccess.QueryListAsync(sql); + + //var entity = new Ghra_Grade(); + //DbAccess.Add(entity); + + } + + } +} diff --git a/Tiobon.Core.Tests/Tiobon.Core.Tests.csproj b/Tiobon.Core.Tests/Tiobon.Core.Tests.csproj index 0edc85a5..053d455e 100644 --- a/Tiobon.Core.Tests/Tiobon.Core.Tests.csproj +++ b/Tiobon.Core.Tests/Tiobon.Core.Tests.csproj @@ -18,10 +18,11 @@ - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -31,6 +32,12 @@ + + + ..\Lib\SimpleDapper.dll + + + Always diff --git a/Tiobon.Core.Tests/appsettings.json b/Tiobon.Core.Tests/appsettings.json index c233b1ea..58704b32 100644 --- a/Tiobon.Core.Tests/appsettings.json +++ b/Tiobon.Core.Tests/appsettings.json @@ -1,98 +1,99 @@ { - "urls": "http://*:9291", //web服务端口,如果用IIS部署,把这个去掉 - "Serilog": { - "MinimumLevel": { - "Default": "Debug", - "Override": { - "Microsoft": "Information", - "Microsoft.AspNetCore": "Warning", - "System": "Warning", - "System.Net.Http.HttpClient": "Warning", - "Hangfire": "Information", - "Magicodes": "Warning", - "DotNetCore.CAP": "Information", - "Savorboard.CAP": "Information", - "Quartz": "Information" - } - } - }, - "AllowedHosts": "*", - "Redis": { - "Enable": false, - "ConnectionString": "127.0.0.1:6379", - "InstanceName": "" //前缀 - }, - "RabbitMQ": { - "Enabled": false, - "Connection": "118.25.251.13", - "UserName": "", - "Password": "!", - "RetryCount": 3 - }, - "Kafka": { - "Enabled": false, - "Servers": "localhost:9092", - "Topic": "Tiobon", - "GroupId": "Tiobon-consumer", - "NumPartitions": 3 //主题分区数量 - }, - "EventBus": { - "Enabled": false, - "SubscriptionClientName": "Tiobon.Core" - }, - "AppSettings": { - "CachingAOP": { - "Enabled": true + "urls": "http://*:9291", //web服务端口,如果用IIS部署,把这个去掉 + "Serilog": { + "MinimumLevel": { + "Default": "Debug", + "Override": { + "Microsoft": "Information", + "Microsoft.AspNetCore": "Warning", + "System": "Warning", + "System.Net.Http.HttpClient": "Warning", + "Hangfire": "Information", + "Magicodes": "Warning", + "DotNetCore.CAP": "Information", + "Savorboard.CAP": "Information", + "Quartz": "Information" + } + } + }, + "AllowedHosts": "*", + "Redis": { + "Enable": false, + "ConnectionString": "127.0.0.1:6379", + "InstanceName": "" //前缀 }, - "LogToDb": true, - "LogAOP": { - "Enabled": false, - "LogToFile": { - "Enabled": true - }, - "LogToDB": { - "Enabled": true - } + "RabbitMQ": { + "Enabled": true, + "Connection": "101xxxx57", + "UserName": "xxxx", + "Password": "xxxxx", + "Port": "5672", + "RetryCount": 2 }, - "TranAOP": { - "Enabled": true + "Kafka": { + "Enabled": false, + "Servers": "localhost:9092", + "Topic": "Tiobon", + "GroupId": "Tiobon-consumer", + "NumPartitions": 3 //主题分区数量 }, - "UserAuditAOP": { - "Enabled": false + "EventBus": { + "Enabled": false, + "SubscriptionClientName": "Tiobon.Core" }, - "SqlAOP": { - "Enabled": true, - "LogToFile": { - "Enabled": true - }, - "LogToDB": { - "Enabled": true - }, - "LogToConsole": { - "Enabled": true - } + "AppSettings": { + "CachingAOP": { + "Enabled": true + }, + "LogToDb": true, + "LogAOP": { + "Enabled": false, + "LogToFile": { + "Enabled": true + }, + "LogToDB": { + "Enabled": true + } + }, + "TranAOP": { + "Enabled": true + }, + "UserAuditAOP": { + "Enabled": false + }, + "SqlAOP": { + "Enabled": true, + "LogToFile": { + "Enabled": true + }, + "LogToDB": { + "Enabled": true + }, + "LogToConsole": { + "Enabled": true + } + }, + "Date": "2018-08-28", + "SeedDBEnabled": false, //只生成表结构 + "SeedDBDataEnabled": false, //生成表,并初始化数据 + "Author": "Tiobon.Core", + "SvcName": "", // /svc/Tiobon + "UseLoadTest": false }, - "Date": "2018-08-28", - "SeedDBEnabled": true, //只生成表结构 - "SeedDBDataEnabled": true, //生成表,并初始化数据 - "Author": "Tiobon.Core", - "SvcName": "", // /svc/Tiobon - "UseLoadTest": false - }, - //优化DB配置、不会再区分单库多库 - //MainDb:标识当前项目的主库,所对应的连接字符串的Enabled必须为true - //Log:标识日志库,所对应的连接字符串的Enabled必须为true - //从库只需配置Slaves数组,要求数据库类型一致!,比如都是SqlServer - // - //新增,故障转移方案 - //如果主库挂了,会自动切换到备用连接(比如说主库+备用库) - //备用连接的ConnId配置为主库的ConnId+数字即可,比如主库的ConnId为Main,那么备用连接的ConnId为Mian1 - //主库、备用库无需数据库类型一致! - //备用库不会有程序维护,需要手动维护 - "MainDB": "Main", //当前项目的主库,所对应的连接字符串的Enabled必须为true - "DBS": [ - /* + //优化DB配置、不会再区分单库多库 + //MainDb:标识当前项目的主库,所对应的连接字符串的Enabled必须为true + //Log:标识日志库,所对应的连接字符串的Enabled必须为true + //从库只需配置Slaves数组,要求数据库类型一致!,比如都是SqlServer + // + //新增,故障转移方案 + //如果主库挂了,会自动切换到备用连接(比如说主库+备用库) + //备用连接的ConnId配置为主库的ConnId+数字即可,比如主库的ConnId为Main,那么备用连接的ConnId为Mian1 + //主库、备用库无需数据库类型一致! + //备用库不会有程序维护,需要手动维护 + "MainDB": "WMTiobon_MSSQL_Main", //当前项目的主库,所对应的连接字符串的Enabled必须为true + "DBS": [ + /* 对应下边的 DBType MySql = 0, SqlServer = 1, @@ -102,247 +103,268 @@ Dm = 5,//达梦 Kdbndp = 6,//人大金仓 */ - { - "ConnId": "Main", - "DBType": 2, - "Enabled": true, - "Connection": "WMTiobon.db", //sqlite只写数据库名就行 - "Slaves": [ { - "HitRate": 0,// 值越大,优先级越高 0不使用 - "Connection": "WMTiobon2.db" - } - ] - }, - { - "ConnId": "Main2", - "DBType": 2, - "Enabled": true, - "Connection": "WMTiobon3.db", //sqlite只写数据库名就行 - "Slaves": [ + "ConnId": "WMTiobon_MSSQL_Main", + "DBType": 1, + "Enabled": true, + "Connection": "Data Source=116.204.98.209;User ID=Tiobon;Password=&($!4UGUyU#$2sp9O;Database=Tiobon;Encrypt=True;TrustServerCertificate=True;", + "ProviderName": "System.Data.SqlClient" + }, + { + "ConnId": "Main", + "DBType": 2, + "Enabled": false, + "Connection": "WMTiobon.db", //sqlite只写数据库名就行 + "Slaves": [ + { + "HitRate": 0, // 值越大,优先级越高 0不使用 + "Connection": "WMTiobon2.db" + } + ] + }, + { + "ConnId": "Main2", + "DBType": 2, + "Enabled": false, + "Connection": "WMTiobon3.db", //sqlite只写数据库名就行 + "Slaves": [ + { + "HitRate": 0, // 值越大,优先级越高 0不使用 + "Connection": "WMTiobon4.db" + } + ] + }, + { + "ConnId": "Log", //日志库连接固定名称,不要改,其他的可以改 + "DBType": 1, + "Enabled": true, + "HitRate": 50, + "Connection": "Data Source=116.204.98.209;User ID=Tiobon;Password=&($!4UGUyU#$2sp9O;Database=Tiobon;Encrypt=True;TrustServerCertificate=True;", + "ProviderName": "System.Data.SqlClient" + }, + { + "ConnId": "WMTiobon_MSSQL_1", + "DBType": 1, + "Enabled": false, + "Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMTiobon_MSSQL_1;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + "ProviderName": "System.Data.SqlClient" + }, { - "HitRate": 0,// 值越大,优先级越高 0不使用 - "Connection": "WMTiobon4.db" + "ConnId": "WMTiobon_MSSQL_2", + "DBType": 1, + "Enabled": false, + "Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMTiobon_MSSQL_2;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + "ProviderName": "System.Data.SqlClient" + }, + { + "ConnId": "WMTiobon_MYSQL", + "DBType": 0, + "Enabled": false, + "Connection": "server=localhost;Database=Tiobon;Uid=root;Pwd=root;Port=3306;Allow User Variables=True;" + }, + { + "ConnId": "WMTiobon_MYSQL_2", + "DBType": 0, + "Enabled": false, + "Connection": "server=localhost;Database=Tioboncore001;Uid=root;Pwd=root;Port=3306;Allow User Variables=True;" + }, + { + "ConnId": "WMTiobon_ORACLE", + "DBType": 3, + "Enabled": false, + "Connection": "Data Source=127.0.0.1/ops;User ID=OPS;Password=123456;Persist Security Info=True;Connection Timeout=60;" + }, + { + "ConnId": "WMTiobon_DM", + "DBType": 5, + "Enabled": false, + "Connection": "Server=xxxxx:5236;User Id=xxxxx;PWD=xxxxx;SCHEMA=TESTDBA;" + }, + { + "ConnId": "WMTiobon_KDBNDP", + "DBType": 6, + "Enabled": false, + "Connection": "Server=127.0.0.1;Port=54321;UID=SYSTEM;PWD=system;database=SQLSUGAR4XTEST1;" } - ] - }, - { - "ConnId": "Log", //日志库连接固定名称,不要改,其他的可以改 - "DBType": 2, - "Enabled": true, - "HitRate": 50, - "Connection": "WMTiobonLog.db" //sqlite只写数据库名就行 - }, - { - "ConnId": "WMTiobon_MSSQL_1", - "DBType": 1, - "Enabled": false, - "Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMTiobon_MSSQL_1;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", - "ProviderName": "System.Data.SqlClient" - }, - { - "ConnId": "WMTiobon_MSSQL_2", - "DBType": 1, - "Enabled": false, - "Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMTiobon_MSSQL_2;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", - "ProviderName": "System.Data.SqlClient" + ], + "Audience": { + "Secret": "sdfsdfsrty45634kkhllghtdgdfss345t678fs", //不要太短,16位+ + "SecretFile": "C:\\my-file\\Tiobon.core.audience.secret.txt", //安全。内容就是Secret + "Issuer": "Tiobon.Core", //这个值一定要在自己的项目里修改!! + "Audience": "wr" //这个值一定要在自己的项目里修改!! }, - { - "ConnId": "WMTiobon_MYSQL", - "DBType": 0, - "Enabled": false, - "Connection": "server=localhost;Database=Tiobon;Uid=root;Pwd=root;Port=3306;Allow User Variables=True;" + "Mongo": { + "ConnectionString": "mongodb://nosql.data", + "Database": "TiobonCoreDb" }, - { - "ConnId": "WMTiobon_MYSQL_2", - "DBType": 0, - "Enabled": false, - "Connection": "server=localhost;Database=Tioboncore001;Uid=root;Pwd=root;Port=3306;Allow User Variables=True;" - }, - { - "ConnId": "WMTiobon_ORACLE", - "DBType": 3, - "Enabled": false, - "Connection": "Data Source=127.0.0.1/ops;User ID=OPS;Password=123456;Persist Security Info=True;Connection Timeout=60;" - }, - { - "ConnId": "WMTiobon_DM", - "DBType": 5, - "Enabled": false, - "Connection": "Server=xxxxx:5236;User Id=xxxxx;PWD=xxxxx;SCHEMA=TESTDBA;" - }, - { - "ConnId": "WMTiobon_KDBNDP", - "DBType": 6, - "Enabled": false, - "Connection": "Server=127.0.0.1;Port=54321;UID=SYSTEM;PWD=system;database=SQLSUGAR4XTEST1;" - } - ], - "Audience": { - "Secret": "sdfsdfsrty45634kkhllghtdgdfss345t678fs", //不要太短,16位+ - "SecretFile": "C:\\my-file\\Tiobon.core.audience.secret.txt", //安全。内容就是Secret - "Issuer": "Tiobon.Core", - "Audience": "wr" - }, - "Mongo": { - "ConnectionString": "mongodb://nosql.data", - "Database": "TiobonCoreDb" - }, - "Startup": { - "Domain": "http://localhost:9291", - "Cors": { - "PolicyName": "CorsIpAccess", //策略名称 - "EnableAllIPs": false, //当为true时,开放所有IP均可访问。 - // 支持多个域名端口,注意端口号后不要带/斜杆:比如localhost:8000/,是错的 - // 注意,http://127.0.0.1:1818 和 http://localhost:1818 是不一样的 - "IPs": "http://127.0.0.1:2364,http://localhost:2364,http://127.0.0.1:6688,http://localhost:6688" - }, - "AppConfigAlert": { - "Enabled": true - }, - "ApiName": "Tiobon.Core", - "IdentityServer4": { - "Enabled": false, // 这里默认是false,表示使用jwt,如果设置为true,则表示系统使用Ids4模式 - "AuthorizationUrl": "http://localhost:5004", // 认证中心域名 - "ApiName": "Tiobon.core.api" // 资源服务器 - }, - "Authing": { - "Enabled": false, - "Issuer": "https://uldr24esx31h-demo.authing.cn/oidc", - "Audience": "63d51c4205c2849803be5178", - "JwksUri": "https://uldr24esx31h-demo.authing.cn/oidc/.well-known/jwks.json" - }, - "RedisMq": { - "Enabled": false //redis 消息队列 - }, - "MiniProfiler": { - "Enabled": false //性能分析开启 - }, - "Nacos": { - "Enabled": false //Nacos注册中心 - } - }, - "Middleware": { - "RequestResponseLog": { - "Enabled": true, - "LogToFile": { - "Enabled": true - }, - "LogToDB": { - "Enabled": true - } + "Startup": { + "Domain": "http://localhost:9291", + "Cors": { + "PolicyName": "CorsIpAccess", //策略名称 + "EnableAllIPs": false, //当为true时,开放所有IP均可访问。 + // 支持多个域名端口,注意端口号后不要带/斜杆:比如localhost:8000/,是错的 + // 注意,http://127.0.0.1:1818 和 http://localhost:1818 是不一样的 + "IPs": "http://127.0.0.1:2364,http://localhost:2364,http://127.0.0.1:6688,http://localhost:6688" + }, + "AppConfigAlert": { + "Enabled": true + }, + "IdentityServer4": { + "Enabled": false, // 这里默认是false,表示使用jwt,如果设置为true,则表示系统使用Ids4模式 + "AuthorizationUrl": "http://localhost:5004", // 认证中心域名 + "ApiName": "Tiobon.core.api" // 资源服务器 + }, + "Authing": { + "Enabled": false, + "Issuer": "https://uldr24esx31h-demo.authing.cn/oidc", + "Audience": "63d51c4205c2849803be5178", + "JwksUri": "https://uldr24esx31h-demo.authing.cn/oidc/.well-known/jwks.json" + }, + "RedisMq": { + "Enabled": false //redis 消息队列 + }, + "MiniProfiler": { + "Enabled": false //性能分析开启 + }, + "Nacos": { + "Enabled": false //Nacos注册中心 + } }, - "IPLog": { - "Enabled": true, - "LogToFile": { - "Enabled": true - }, - "LogToDB": { - "Enabled": true - } + "Middleware": { + "RequestResponseLog": { + "Enabled": true, + "LogToFile": { + "Enabled": true + }, + "LogToDB": { + "Enabled": true + } + }, + "IPLog": { + "Enabled": true, + "LogToFile": { + "Enabled": true + }, + "LogToDB": { + "Enabled": true + } + }, + "RecordAccessLogs": { + "Enabled": true, + "LogToFile": { + "Enabled": true + }, + "LogToDB": { + "Enabled": true + }, + "IgnoreApis": "/api/permission/getnavigationbar,/api/monitor/getids4users,/api/monitor/getaccesslogs,/api/monitor/server,/api/monitor/getactiveusers,/api/monitor/server," + }, + "SignalR": { + "Enabled": true + }, + "SignalRSendLog": { + "Enabled": true + }, + "QuartzNetJob": { + "Enabled": true + }, + "Consul": { + "Enabled": false + }, + "IpRateLimit": { + "Enabled": true + }, + "EncryptionResponse": { + "Enabled": true, + "AllApis": false, + "LimitApis": [ + "/api/Login/GetJwtTokenSecret" + ] + }, + "EncryptionRequest": { + "Enabled": true, + "AllApis": false, + "LimitApis": [ + "/api/Login/GetJwtTokenSecret" + ] + } }, - "RecordAccessLogs": { - "Enabled": true, - "LogToFile": { - "Enabled": true - }, - "LogToDB": { - "Enabled": true - }, - "IgnoreApis": "/api/permission/getnavigationbar,/api/monitor/getids4users,/api/monitor/getaccesslogs,/api/monitor/server,/api/monitor/getactiveusers,/api/monitor/server," + "IpRateLimiting": { + "EnableEndpointRateLimiting": false, //False: globally executed, true: executed for each + "StackBlockedRequests": false, //False: Number of rejections should be recorded on another counter + "RealIpHeader": "X-Real-IP", + "ClientIdHeader": "X-ClientId", + "IpWhitelist": [], //白名单 + "EndpointWhitelist": [ "get:/api/xxx", "*:/api/yyy" ], + "ClientWhitelist": [ "dev-client-1", "dev-client-2" ], + "QuotaExceededResponse": { + "Content": "{{\"status\":429,\"msg\":\"访问过于频繁,请稍后重试\",\"success\":false}}", + "ContentType": "application/json", + "StatusCode": 429 + }, + "HttpStatusCode": 429, //返回状态码 + "GeneralRules": [ //api规则,结尾一定要带* + { + "Endpoint": "*:/api/Tiobon*", + "Period": "1m", + "Limit": 20 + }, + { + "Endpoint": "*/api/*", + "Period": "1s", + "Limit": 3 + }, + { + "Endpoint": "*/api/*", + "Period": "1m", + "Limit": 30 + }, + { + "Endpoint": "*/api/*", + "Period": "12h", + "Limit": 500 + } + ] + }, - "SignalR": { - "Enabled": true + "ConsulSetting": { + "ServiceName": "TiobonCoreService", + "ServiceIP": "localhost", + "ServicePort": "9291", + "ServiceHealthCheck": "/healthcheck", + "ConsulAddress": "http://localhost:8500" }, - "SignalRSendLog": { - "Enabled": true + "PayInfo": { //建行聚合支付信息 + "MERCHANTID": "", //商户号 + "POSID": "", //柜台号 + "BRANCHID": "", //分行号 + "pubKey": "", //公钥 + "USER_ID": "", //操作员号 + "PASSWORD": "", //密码 + "OutAddress": "http://127.0.0.1:12345" //外联地址 }, - "QuartzNetJob": { - "Enabled": true + "nacos": { + "ServerAddresses": [ "http://localhost:8848" ], // nacos 连接地址 + "DefaultTimeOut": 15000, // 默认超时时间 + "Namespace": "public", // 命名空间 + "ListenInterval": 10000, // 监听的频率 + "ServiceName": "Tiobon.Core.Api", // 服务名 + "Port": "9291", // 服务端口号 + "RegisterEnabled": true // 是否直接注册nacos }, - "Consul": { - "Enabled": false + "LogFiedOutPutConfigs": { + "tcpAddressHost": "", // 输出elk的tcp连接地址 + "tcpAddressPort": 0, // 输出elk的tcp端口号 + "ConfigsInfo": [ // 配置的输出elk节点内容 常用语动态标识 + { + "FiedName": "applicationName", + "FiedValue": "Tiobon.Core.Api" + } + ] }, - "IpRateLimit": { - "Enabled": true + "Seq": { + "Enabled": true, + "Address": "http://localhost:5341/", + "ApiKey": "" } - }, - "IpRateLimiting": { - "EnableEndpointRateLimiting": true, //False: globally executed, true: executed for each - "StackBlockedRequests": false, //False: Number of rejections should be recorded on another counter - "RealIpHeader": "X-Real-IP", - "ClientIdHeader": "X-ClientId", - "IpWhitelist": [], //白名单 - "EndpointWhitelist": [ "get:/api/xxx", "*:/api/yyy" ], - "ClientWhitelist": [ "dev-client-1", "dev-client-2" ], - "QuotaExceededResponse": { - "Content": "{{\"status\":429,\"msg\":\"访问过于频繁,请稍后重试\",\"success\":false}}", - "ContentType": "application/json", - "StatusCode": 429 - }, - "HttpStatusCode": 429, //返回状态码 - "GeneralRules": [ //api规则,结尾一定要带* - { - "Endpoint": "*:/api/Tiobon*", - "Period": "1m", - "Limit": 20 - }, - { - "Endpoint": "*/api/*", - "Period": "1s", - "Limit": 3 - }, - { - "Endpoint": "*/api/*", - "Period": "1m", - "Limit": 30 - }, - { - "Endpoint": "*/api/*", - "Period": "12h", - "Limit": 500 - } - ] - - }, - "ConsulSetting": { - "ServiceName": "TiobonCoreService", - "ServiceIP": "localhost", - "ServicePort": "9291", - "ServiceHealthCheck": "/healthcheck", - "ConsulAddress": "http://localhost:8500" - }, - "PayInfo": { //建行聚合支付信息 - "MERCHANTID": "", //商户号 - "POSID": "", //柜台号 - "BRANCHID": "", //分行号 - "pubKey": "", //公钥 - "USER_ID": "", //操作员号 - "PASSWORD": "", //密码 - "OutAddress": "http://127.0.0.1:12345" //外联地址 - }, - "nacos": { - "ServerAddresses": [ "http://localhost:8848" ], // nacos 连接地址 - "DefaultTimeOut": 15000, // 默认超时时间 - "Namespace": "public", // 命名空间 - "ListenInterval": 10000, // 监听的频率 - "ServiceName": "Tiobon.Core.Api", // 服务名 - "Port": "9291", // 服务端口号 - "RegisterEnabled": true // 是否直接注册nacos - }, - "LogFiedOutPutConfigs": { - "tcpAddressHost": "", // 输出elk的tcp连接地址 - "tcpAddressPort": 0, // 输出elk的tcp端口号 - "ConfigsInfo": [ // 配置的输出elk节点内容 常用语动态标识 - { - "FiedName": "applicationName", - "FiedValue": "Tiobon.Core.Api" - } - ] - }, - "Seq": { - "Enabled": true, - "Address": "http://localhost:5341/", - "ApiKey": "" - } } \ No newline at end of file