diff --git a/aspnet-core/LINGYUN.MicroService.All.sln b/aspnet-core/LINGYUN.MicroService.All.sln
index e4d009f8d..18ec09387 100644
--- a/aspnet-core/LINGYUN.MicroService.All.sln
+++ b/aspnet-core/LINGYUN.MicroService.All.sln
@@ -109,12 +109,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi", "modules\message\LINGYUN.Abp.MessageService.HttpApi\LINGYUN.Abp.MessageService.HttpApi.csproj", "{9E12ADBF-713B-4FE7-B71F-52B5078A57CE}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.WeChatValidator", "modules\identityServer\LINGYUN.Abp.IdentityServer.WeChatValidator\LINGYUN.Abp.IdentityServer.WeChatValidator.csproj", "{02043AD5-5E06-4EDD-8162-983E766C38EC}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.WeApp", "modules\wechat\LINGYUN.Abp.Notifications.WeChat\LINGYUN.Abp.Notifications.WeChat.WeApp.csproj", "{85EF4251-EFC4-4CC9-912B-EA5DB1E2E359}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Authorization", "modules\wechat\LINGYUN.Abp.WeChat.Authorization\LINGYUN.Abp.WeChat.Authorization.csproj", "{263A8A1C-69D0-4C3F-B33E-8F0831C146EB}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.MySql", "modules\common\LINGYUN.Abp.Hangfire.MySqlStorage\LINGYUN.Abp.Hangfire.Storage.MySql.csproj", "{47CC8F7A-681D-42B9-AE04-78453782C1B6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.SqlServer", "modules\common\LINGYUN.Abp.Hangfire.Storage.SqlServer\LINGYUN.Abp.Hangfire.Storage.SqlServer.csproj", "{F595CB9F-B117-4D62-A1AE-48599927DB36}"
@@ -245,8 +241,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManag
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain.Identity", "modules\identity\LINGYUN.Abp.PermissionManagement.Domain.Identity\LINGYUN.Abp.PermissionManagement.Domain.Identity.csproj", "{2D377D3A-70EC-4BB3-9F4C-6C933693DA98}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Web", "modules\account\LINGYUN.Abp.Account.Web\LINGYUN.Abp.Account.Web.csproj", "{5F43141B-6C63-4547-B9D6-D69EC3D7CA7E}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.SignalR.JwtToken", "modules\common\LINGYUN.Abp.AspNetCore.SignalR\LINGYUN.Abp.AspNetCore.SignalR.JwtToken.csproj", "{A66D48C9-F141-4111-9169-CEB64AFFF61D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime.SignalR", "modules\common\LINGYUN.Abp.RealTime.SignalR\LINGYUN.Abp.RealTime.SignalR.csproj", "{524276E1-053D-4191-ABF7-4CDA01BFFBC3}"
@@ -259,6 +253,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "modul
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain.Shared", "modules\identity\LINGYUN.Abp.Identity.Domain.Shared\LINGYUN.Abp.Identity.Domain.Shared.csproj", "{E92A1CAA-5758-41EF-B67E-C0D394E85417}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProgram", "modules\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{F18DE651-A3E4-478F-A2B5-686429729EB8}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official", "modules\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{42309C06-C0F2-490F-931B-CF41FA1970FF}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.SettingManagement", "modules\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj", "{EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.WeChat", "modules\identityServer\LINGYUN.Abp.IdentityServer.WeChat\LINGYUN.Abp.IdentityServer.WeChat.csproj", "{7356FC4B-CAB2-4808-8C97-9AF74583F3A4}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -425,18 +427,10 @@ Global
{9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Release|Any CPU.Build.0 = Release|Any CPU
- {02043AD5-5E06-4EDD-8162-983E766C38EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {02043AD5-5E06-4EDD-8162-983E766C38EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {02043AD5-5E06-4EDD-8162-983E766C38EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {02043AD5-5E06-4EDD-8162-983E766C38EC}.Release|Any CPU.Build.0 = Release|Any CPU
{85EF4251-EFC4-4CC9-912B-EA5DB1E2E359}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{85EF4251-EFC4-4CC9-912B-EA5DB1E2E359}.Debug|Any CPU.Build.0 = Debug|Any CPU
{85EF4251-EFC4-4CC9-912B-EA5DB1E2E359}.Release|Any CPU.ActiveCfg = Release|Any CPU
{85EF4251-EFC4-4CC9-912B-EA5DB1E2E359}.Release|Any CPU.Build.0 = Release|Any CPU
- {263A8A1C-69D0-4C3F-B33E-8F0831C146EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {263A8A1C-69D0-4C3F-B33E-8F0831C146EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {263A8A1C-69D0-4C3F-B33E-8F0831C146EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {263A8A1C-69D0-4C3F-B33E-8F0831C146EB}.Release|Any CPU.Build.0 = Release|Any CPU
{47CC8F7A-681D-42B9-AE04-78453782C1B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{47CC8F7A-681D-42B9-AE04-78453782C1B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{47CC8F7A-681D-42B9-AE04-78453782C1B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -661,10 +655,6 @@ Global
{2D377D3A-70EC-4BB3-9F4C-6C933693DA98}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2D377D3A-70EC-4BB3-9F4C-6C933693DA98}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2D377D3A-70EC-4BB3-9F4C-6C933693DA98}.Release|Any CPU.Build.0 = Release|Any CPU
- {5F43141B-6C63-4547-B9D6-D69EC3D7CA7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5F43141B-6C63-4547-B9D6-D69EC3D7CA7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5F43141B-6C63-4547-B9D6-D69EC3D7CA7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5F43141B-6C63-4547-B9D6-D69EC3D7CA7E}.Release|Any CPU.Build.0 = Release|Any CPU
{A66D48C9-F141-4111-9169-CEB64AFFF61D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A66D48C9-F141-4111-9169-CEB64AFFF61D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A66D48C9-F141-4111-9169-CEB64AFFF61D}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -685,6 +675,22 @@ Global
{E92A1CAA-5758-41EF-B67E-C0D394E85417}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E92A1CAA-5758-41EF-B67E-C0D394E85417}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E92A1CAA-5758-41EF-B67E-C0D394E85417}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F18DE651-A3E4-478F-A2B5-686429729EB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F18DE651-A3E4-478F-A2B5-686429729EB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F18DE651-A3E4-478F-A2B5-686429729EB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F18DE651-A3E4-478F-A2B5-686429729EB8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {42309C06-C0F2-490F-931B-CF41FA1970FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {42309C06-C0F2-490F-931B-CF41FA1970FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {42309C06-C0F2-490F-931B-CF41FA1970FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {42309C06-C0F2-490F-931B-CF41FA1970FF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7356FC4B-CAB2-4808-8C97-9AF74583F3A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7356FC4B-CAB2-4808-8C97-9AF74583F3A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7356FC4B-CAB2-4808-8C97-9AF74583F3A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7356FC4B-CAB2-4808-8C97-9AF74583F3A4}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -741,9 +747,7 @@ Global
{608A3BD0-FC8D-48B0-B1C5-F3203A3BE99F} = {672E1170-7B18-474B-85C7-1961BF2A48AE}
{0D1DB712-B48D-4FB7-9A47-694C668A62E3} = {608A3BD0-FC8D-48B0-B1C5-F3203A3BE99F}
{9E12ADBF-713B-4FE7-B71F-52B5078A57CE} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
- {02043AD5-5E06-4EDD-8162-983E766C38EC} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
{85EF4251-EFC4-4CC9-912B-EA5DB1E2E359} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
- {263A8A1C-69D0-4C3F-B33E-8F0831C146EB} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
{47CC8F7A-681D-42B9-AE04-78453782C1B6} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
{F595CB9F-B117-4D62-A1AE-48599927DB36} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
{5CF403B2-47C9-4E4E-8856-0294BDD64884} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
@@ -808,13 +812,16 @@ Global
{CC362C67-6FC1-42B3-A130-8120AA8D790C} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
{B46D6DAF-98C6-441F-9FA5-3CAD7CF27727} = {CC362C67-6FC1-42B3-A130-8120AA8D790C}
{2D377D3A-70EC-4BB3-9F4C-6C933693DA98} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
- {5F43141B-6C63-4547-B9D6-D69EC3D7CA7E} = {9E72FEB9-A626-4312-892B-CDD043879758}
{A66D48C9-F141-4111-9169-CEB64AFFF61D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
{524276E1-053D-4191-ABF7-4CDA01BFFBC3} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
{43083268-74DE-4C68-824A-FB0CEC77358D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
{DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
{BAE74ABC-1096-495F-A624-BEBFBC1896F2} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
{E92A1CAA-5758-41EF-B67E-C0D394E85417} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
+ {F18DE651-A3E4-478F-A2B5-686429729EB8} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
+ {42309C06-C0F2-490F-931B-CF41FA1970FF} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
+ {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
+ {7356FC4B-CAB2-4808-8C97-9AF74583F3A4} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C95FDF91-16F2-4A8B-A4BE-0E62D1B66718}
diff --git a/aspnet-core/LINGYUN.MicroService.BackendAdmin.sln b/aspnet-core/LINGYUN.MicroService.BackendAdmin.sln
index 7b3a457d9..affc535f7 100644
--- a/aspnet-core/LINGYUN.MicroService.BackendAdmin.sln
+++ b/aspnet-core/LINGYUN.MicroService.BackendAdmin.sln
@@ -59,6 +59,16 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.HttpApi
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application", "modules\identity\LINGYUN.Abp.Identity.Application\LINGYUN.Abp.Identity.Application.csproj", "{9BABF219-AAAA-4611-8B49-BFCCBD046934}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{B36F627B-FD7D-4357-A623-F01AFF78B80D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "modules\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProgram", "modules\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official", "modules\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{EAD2F955-88CA-4570-AB81-31FB2FF02605}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.SettingManagement", "modules\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj", "{3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -141,6 +151,22 @@ Global
{9BABF219-AAAA-4611-8B49-BFCCBD046934}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9BABF219-AAAA-4611-8B49-BFCCBD046934}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9BABF219-AAAA-4611-8B49-BFCCBD046934}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C1514C9C-7FB2-412E-A931-7F2F0C9A65DC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D42CE0F0-331F-4E5C-92CD-6B4DD6854E69}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EAD2F955-88CA-4570-AB81-31FB2FF02605}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EAD2F955-88CA-4570-AB81-31FB2FF02605}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EAD2F955-88CA-4570-AB81-31FB2FF02605}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EAD2F955-88CA-4570-AB81-31FB2FF02605}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -172,6 +198,11 @@ Global
{D4AB1BF0-95EC-4E34-9C39-E888ED30C535} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}
{A387EF32-1FAD-412F-893D-43485CE59DB4} = {9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770}
{9BABF219-AAAA-4611-8B49-BFCCBD046934} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}
+ {B36F627B-FD7D-4357-A623-F01AFF78B80D} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
+ {C1514C9C-7FB2-412E-A931-7F2F0C9A65DC} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
+ {D42CE0F0-331F-4E5C-92CD-6B4DD6854E69} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
+ {EAD2F955-88CA-4570-AB81-31FB2FF02605} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
+ {3FD9C35C-3A8D-49F5-B7C5-4828AA3407AB} = {B36F627B-FD7D-4357-A623-F01AFF78B80D}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1573B900-87BA-4AD3-B785-6DD78127ADEF}
diff --git a/aspnet-core/LINGYUN.MicroService.IdentityServer.sln b/aspnet-core/LINGYUN.MicroService.IdentityServer.sln
index 12c2d55a8..b790ae4c6 100644
--- a/aspnet-core/LINGYUN.MicroService.IdentityServer.sln
+++ b/aspnet-core/LINGYUN.MicroService.IdentityServer.sln
@@ -13,16 +13,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity-server", "identity
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.SmsValidator", "modules\identityServer\LINGYUN.Abp.IdentityServer.SmsValidator\LINGYUN.Abp.IdentityServer.SmsValidator.csproj", "{9EA06629-DBAC-4369-9850-B7415D0470B0}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.WeChatValidator", "modules\identityServer\LINGYUN.Abp.IdentityServer.WeChatValidator\LINGYUN.Abp.IdentityServer.WeChatValidator.csproj", "{B9E9D754-0BC1-42EA-94B3-631D1EA82B48}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{70B8D735-1E89-4163-8EDB-56A74E374CF4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain.Identity", "modules\identity\LINGYUN.Abp.PermissionManagement.Domain.Identity\LINGYUN.Abp.PermissionManagement.Domain.Identity.csproj", "{F87B2BA3-40BC-4CB8-B53E-793C860F285D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{AF8AECC8-0F42-4FC5-B3C0-00987BA8279F}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Authorization", "modules\wechat\LINGYUN.Abp.WeChat.Authorization\LINGYUN.Abp.WeChat.Authorization.csproj", "{F656C1B2-6122-44C1-97F4-421CB4C03ED8}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "permission-management", "permission-management", "{2FEA83BA-2E6D-40AF-8781-12CFD042457F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Domain\LINGYUN.Abp.PermissionManagement.Domain.csproj", "{A0A11373-635B-4343-8EE7-1DFC3611F05A}"
@@ -51,6 +47,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Entity
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.EntityFrameworkCore", "modules\identityServer\LINGYUN.Abp.IdentityServer.EntityFrameworkCore\LINGYUN.Abp.IdentityServer.EntityFrameworkCore.csproj", "{644FAB8F-ED83-4539-AF43-8F8FE61EF778}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.MiniProgram", "modules\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{648D7B5D-8B78-4F90-BDE0-4AC50C902CC3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Official", "modules\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{F762D1BB-66FB-421A-A917-D80B7DCC0DC0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.IdentityServer.WeChat", "modules\identityServer\LINGYUN.Abp.IdentityServer.WeChat\LINGYUN.Abp.IdentityServer.WeChat.csproj", "{D63C0CA8-554D-43F2-8DB4-8B464E4C1CDA}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -65,18 +67,10 @@ Global
{9EA06629-DBAC-4369-9850-B7415D0470B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9EA06629-DBAC-4369-9850-B7415D0470B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9EA06629-DBAC-4369-9850-B7415D0470B0}.Release|Any CPU.Build.0 = Release|Any CPU
- {B9E9D754-0BC1-42EA-94B3-631D1EA82B48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B9E9D754-0BC1-42EA-94B3-631D1EA82B48}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B9E9D754-0BC1-42EA-94B3-631D1EA82B48}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B9E9D754-0BC1-42EA-94B3-631D1EA82B48}.Release|Any CPU.Build.0 = Release|Any CPU
{F87B2BA3-40BC-4CB8-B53E-793C860F285D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F87B2BA3-40BC-4CB8-B53E-793C860F285D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F87B2BA3-40BC-4CB8-B53E-793C860F285D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F87B2BA3-40BC-4CB8-B53E-793C860F285D}.Release|Any CPU.Build.0 = Release|Any CPU
- {F656C1B2-6122-44C1-97F4-421CB4C03ED8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F656C1B2-6122-44C1-97F4-421CB4C03ED8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F656C1B2-6122-44C1-97F4-421CB4C03ED8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F656C1B2-6122-44C1-97F4-421CB4C03ED8}.Release|Any CPU.Build.0 = Release|Any CPU
{A0A11373-635B-4343-8EE7-1DFC3611F05A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A0A11373-635B-4343-8EE7-1DFC3611F05A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A0A11373-635B-4343-8EE7-1DFC3611F05A}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -121,6 +115,18 @@ Global
{644FAB8F-ED83-4539-AF43-8F8FE61EF778}.Debug|Any CPU.Build.0 = Debug|Any CPU
{644FAB8F-ED83-4539-AF43-8F8FE61EF778}.Release|Any CPU.ActiveCfg = Release|Any CPU
{644FAB8F-ED83-4539-AF43-8F8FE61EF778}.Release|Any CPU.Build.0 = Release|Any CPU
+ {648D7B5D-8B78-4F90-BDE0-4AC50C902CC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {648D7B5D-8B78-4F90-BDE0-4AC50C902CC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {648D7B5D-8B78-4F90-BDE0-4AC50C902CC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {648D7B5D-8B78-4F90-BDE0-4AC50C902CC3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F762D1BB-66FB-421A-A917-D80B7DCC0DC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F762D1BB-66FB-421A-A917-D80B7DCC0DC0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F762D1BB-66FB-421A-A917-D80B7DCC0DC0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F762D1BB-66FB-421A-A917-D80B7DCC0DC0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D63C0CA8-554D-43F2-8DB4-8B464E4C1CDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D63C0CA8-554D-43F2-8DB4-8B464E4C1CDA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D63C0CA8-554D-43F2-8DB4-8B464E4C1CDA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D63C0CA8-554D-43F2-8DB4-8B464E4C1CDA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -129,11 +135,9 @@ Global
{BF8073FF-6403-4ED6-A3CD-74F240DC8044} = {DDCA574F-911B-4547-BA21-12CCE1022D95}
{98887A8F-7040-4FA1-842F-A4C77A61ED09} = {7C727110-59CA-495B-8143-C5DDEDE41289}
{9EA06629-DBAC-4369-9850-B7415D0470B0} = {98887A8F-7040-4FA1-842F-A4C77A61ED09}
- {B9E9D754-0BC1-42EA-94B3-631D1EA82B48} = {98887A8F-7040-4FA1-842F-A4C77A61ED09}
{70B8D735-1E89-4163-8EDB-56A74E374CF4} = {7C727110-59CA-495B-8143-C5DDEDE41289}
{F87B2BA3-40BC-4CB8-B53E-793C860F285D} = {70B8D735-1E89-4163-8EDB-56A74E374CF4}
{AF8AECC8-0F42-4FC5-B3C0-00987BA8279F} = {7C727110-59CA-495B-8143-C5DDEDE41289}
- {F656C1B2-6122-44C1-97F4-421CB4C03ED8} = {AF8AECC8-0F42-4FC5-B3C0-00987BA8279F}
{2FEA83BA-2E6D-40AF-8781-12CFD042457F} = {7C727110-59CA-495B-8143-C5DDEDE41289}
{A0A11373-635B-4343-8EE7-1DFC3611F05A} = {2FEA83BA-2E6D-40AF-8781-12CFD042457F}
{6F13C138-1D71-48F5-A404-94047242E98F} = {AF8AECC8-0F42-4FC5-B3C0-00987BA8279F}
@@ -148,6 +152,9 @@ Global
{6514E12E-D97C-4311-8301-F270D4E04A9F} = {70B8D735-1E89-4163-8EDB-56A74E374CF4}
{77F424CB-75F2-4D7F-8B52-BBE2E09CB423} = {70B8D735-1E89-4163-8EDB-56A74E374CF4}
{644FAB8F-ED83-4539-AF43-8F8FE61EF778} = {98887A8F-7040-4FA1-842F-A4C77A61ED09}
+ {648D7B5D-8B78-4F90-BDE0-4AC50C902CC3} = {AF8AECC8-0F42-4FC5-B3C0-00987BA8279F}
+ {F762D1BB-66FB-421A-A917-D80B7DCC0DC0} = {AF8AECC8-0F42-4FC5-B3C0-00987BA8279F}
+ {D63C0CA8-554D-43F2-8DB4-8B464E4C1CDA} = {98887A8F-7040-4FA1-842F-A4C77A61ED09}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {FCB77471-9ECB-4666-A316-1D6A6285A468}
diff --git a/aspnet-core/LINGYUN.MicroService.IdentityServerAdmin.sln b/aspnet-core/LINGYUN.MicroService.IdentityServerAdmin.sln
index 087d6dc2a..97c6dcb92 100644
--- a/aspnet-core/LINGYUN.MicroService.IdentityServerAdmin.sln
+++ b/aspnet-core/LINGYUN.MicroService.IdentityServerAdmin.sln
@@ -47,8 +47,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManag
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{7EE9651C-17B0-4343-A2ED-92439F8C9019}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Authorization", "modules\wechat\LINGYUN.Abp.WeChat.Authorization\LINGYUN.Abp.WeChat.Authorization.csproj", "{F61FA8AA-4248-4F2B-87E0-73CD2C027783}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{FD2DDD48-8F84-4924-BBAF-52080AB32267}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Settings", "modules\common\LINGYUN.Abp.Settings\LINGYUN.Abp.Settings.csproj", "{A8C83B9C-C9BF-48EF-80FF-D4FE2C936EFC}"
@@ -75,6 +73,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.Db
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Validation", "modules\common\LINGYUN.Abp.AspNetCore.Mvc.Validation\LINGYUN.Abp.AspNetCore.Mvc.Validation.csproj", "{B3181D37-F379-4E16-8621-5E739C519393}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProgram", "modules\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{AD1C3335-A2A1-49C1-A6DB-817C54859B65}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -145,10 +145,6 @@ Global
{177B6CD3-1690-416D-9B37-A821093DEFBD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{177B6CD3-1690-416D-9B37-A821093DEFBD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{177B6CD3-1690-416D-9B37-A821093DEFBD}.Release|Any CPU.Build.0 = Release|Any CPU
- {F61FA8AA-4248-4F2B-87E0-73CD2C027783}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F61FA8AA-4248-4F2B-87E0-73CD2C027783}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F61FA8AA-4248-4F2B-87E0-73CD2C027783}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F61FA8AA-4248-4F2B-87E0-73CD2C027783}.Release|Any CPU.Build.0 = Release|Any CPU
{A8C83B9C-C9BF-48EF-80FF-D4FE2C936EFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A8C83B9C-C9BF-48EF-80FF-D4FE2C936EFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A8C83B9C-C9BF-48EF-80FF-D4FE2C936EFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -193,6 +189,10 @@ Global
{B3181D37-F379-4E16-8621-5E739C519393}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B3181D37-F379-4E16-8621-5E739C519393}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B3181D37-F379-4E16-8621-5E739C519393}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AD1C3335-A2A1-49C1-A6DB-817C54859B65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AD1C3335-A2A1-49C1-A6DB-817C54859B65}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AD1C3335-A2A1-49C1-A6DB-817C54859B65}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AD1C3335-A2A1-49C1-A6DB-817C54859B65}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -218,7 +218,6 @@ Global
{6679A09F-124A-470A-81F5-A94302CEFEE4} = {BD964040-90B2-4179-A5EB-5830F5C7E073}
{177B6CD3-1690-416D-9B37-A821093DEFBD} = {BD964040-90B2-4179-A5EB-5830F5C7E073}
{7EE9651C-17B0-4343-A2ED-92439F8C9019} = {14B8F528-C649-4FAD-9BBB-6C979ED403E1}
- {F61FA8AA-4248-4F2B-87E0-73CD2C027783} = {7EE9651C-17B0-4343-A2ED-92439F8C9019}
{FD2DDD48-8F84-4924-BBAF-52080AB32267} = {14B8F528-C649-4FAD-9BBB-6C979ED403E1}
{A8C83B9C-C9BF-48EF-80FF-D4FE2C936EFC} = {FD2DDD48-8F84-4924-BBAF-52080AB32267}
{23536755-4F00-4929-9C5E-D4CABD1CC513} = {BD964040-90B2-4179-A5EB-5830F5C7E073}
@@ -232,6 +231,7 @@ Global
{99B60A42-29DA-4D91-9255-B90F53BC6D6E} = {89BA9708-62E5-4FD6-A28A-CF9E1C26DCAE}
{70C4FA43-0526-48E3-B852-A21395502604} = {89BA9708-62E5-4FD6-A28A-CF9E1C26DCAE}
{B3181D37-F379-4E16-8621-5E739C519393} = {FD2DDD48-8F84-4924-BBAF-52080AB32267}
+ {AD1C3335-A2A1-49C1-A6DB-817C54859B65} = {7EE9651C-17B0-4343-A2ED-92439F8C9019}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {785FFF4D-BC59-499E-88A3-7CB7A7667228}
diff --git a/aspnet-core/LINGYUN.MicroService.Messages.sln b/aspnet-core/LINGYUN.MicroService.Messages.sln
index 052268efb..194eca8e3 100644
--- a/aspnet-core/LINGYUN.MicroService.Messages.sln
+++ b/aspnet-core/LINGYUN.MicroService.Messages.sln
@@ -47,12 +47,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.W
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation", "modules\common\LINGYUN.Abp.Features.LimitValidation\LINGYUN.Abp.Features.LimitValidation.csproj", "{93971F1F-F6AC-4F83-8119-21260FCE2828}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Authorization", "modules\wechat\LINGYUN.Abp.WeChat.Authorization\LINGYUN.Abp.WeChat.Authorization.csproj", "{ADB894C3-8CED-4809-8D85-478D2335CDA2}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "modules\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{3B87330F-A303-4413-B653-1C9536C74109}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "message", "message", "{D58F1DF5-2DFE-40A2-B136-7606D4CDE903}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProgram", "modules\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{3A4601FE-B091-43A3-AEE6-6440BB37B277}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -131,14 +131,14 @@ Global
{93971F1F-F6AC-4F83-8119-21260FCE2828}.Debug|Any CPU.Build.0 = Debug|Any CPU
{93971F1F-F6AC-4F83-8119-21260FCE2828}.Release|Any CPU.ActiveCfg = Release|Any CPU
{93971F1F-F6AC-4F83-8119-21260FCE2828}.Release|Any CPU.Build.0 = Release|Any CPU
- {ADB894C3-8CED-4809-8D85-478D2335CDA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {ADB894C3-8CED-4809-8D85-478D2335CDA2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {ADB894C3-8CED-4809-8D85-478D2335CDA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {ADB894C3-8CED-4809-8D85-478D2335CDA2}.Release|Any CPU.Build.0 = Release|Any CPU
{3B87330F-A303-4413-B653-1C9536C74109}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3B87330F-A303-4413-B653-1C9536C74109}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3B87330F-A303-4413-B653-1C9536C74109}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3B87330F-A303-4413-B653-1C9536C74109}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3A4601FE-B091-43A3-AEE6-6440BB37B277}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3A4601FE-B091-43A3-AEE6-6440BB37B277}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3A4601FE-B091-43A3-AEE6-6440BB37B277}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3A4601FE-B091-43A3-AEE6-6440BB37B277}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -164,9 +164,9 @@ Global
{78164C5C-63B9-4FB6-ACC9-6496E236C946} = {0C7AA298-2957-4D71-A8F1-1C3C7932A1B3}
{D7B2B2BE-C32C-47AE-A46C-62B7EF8C318E} = {78164C5C-63B9-4FB6-ACC9-6496E236C946}
{93971F1F-F6AC-4F83-8119-21260FCE2828} = {C00828FB-E7D5-4086-BA50-02022594AB73}
- {ADB894C3-8CED-4809-8D85-478D2335CDA2} = {78164C5C-63B9-4FB6-ACC9-6496E236C946}
{3B87330F-A303-4413-B653-1C9536C74109} = {78164C5C-63B9-4FB6-ACC9-6496E236C946}
{D58F1DF5-2DFE-40A2-B136-7606D4CDE903} = {0C7AA298-2957-4D71-A8F1-1C3C7932A1B3}
+ {3A4601FE-B091-43A3-AEE6-6440BB37B277} = {78164C5C-63B9-4FB6-ACC9-6496E236C946}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6238659A-7267-49B9-A499-8746BDEED6B8}
diff --git a/aspnet-core/database/ApiGateway-Init-SqlServer.sql b/aspnet-core/database/ApiGateway-Init-SqlServer.sql
index 07fb68143..55b79d75c 100644
--- a/aspnet-core/database/ApiGateway-Init-SqlServer.sql
+++ b/aspnet-core/database/ApiGateway-Init-SqlServer.sql
@@ -11,7 +11,7 @@
Target Server Version : 12000000
File Encoding : 65001
- Date: 31/10/2020 11:29:14
+ Date: 20/11/2020 17:36:04
*/
@@ -73,7 +73,7 @@ GO
BEGIN TRANSACTION
GO
-INSERT INTO [apigateway].[appapigatewayaggregate] VALUES (N'5', N'{}', N'db569f15577848568bee9616d6b8b53c', N'TEST-APP', N'abp接口代理服务', N'1263083077348196352', N'platform-api-definition,backend-admin-api-definition,messages-api-definition,apigateway-api-definition,identity-server-api-definition,', N'/api/abp/api-definition', N'', N'1', N'AbpApiDefinitionAggregator', NULL, N''), (N'6', N'{}', N'870a2c5df9b34f8c9514aef0250fbb47', N'TEST-APP', N'abp框架配置', N'1263102116090970112', N'apigateway-configuration,platform-configuration,backend-admin-configuration,messages-configuration,identity-server-configuration,', N'/api/abp/application-configuration', N'', N'1', N'AbpApiDefinitionAggregator', NULL, N'')
+INSERT INTO [apigateway].[appapigatewayaggregate] VALUES (N'5', N'{}', N'db569f15577848568bee9616d6b8b53c', N'TEST-APP', N'abp接口代理服务', N'1263083077348196352', N'platform-api-definition,backend-admin-api-definition,messages-api-definition,apigateway-api-definition,identity-server-api-definition,', N'/api/abp/api-definition', N'', N'1', N'AbpApiDefinitionAggregator', NULL, N''), (N'6', N'{}', N'870a2c5df9b34f8c9514aef0250fbb47', N'TEST-APP', N'abp框架配置', N'1263102116090970112', N'apigateway-configuration,platform-configuration,backend-admin-configuration,messages-configuration,identity-server-configuration,', N'/api/abp/application-configuration', N'', N'1', N'AbpApiDefinitionAggregator', NULL, N''), (N'8', N'{}', N'edc962f7e0844bb09cb0fb731f358b4b', N'TEST-APP', N'我的消息订阅', N'1322503807309881344', N'assignables-notifilers,my-subscribes,', N'/api/my-subscribes/assignables-notifilers', N'', N'1', N'AbpApiDefinitionAggregator', NULL, N''), (N'9', N'{}', N'dbfc4b5972034e8ba875551fa8dd29a1', N'TEST-APP', N'全局设置', N'1329708867127799808', N'setting-global,wechat-setting-global,', N'/api/setting-management/settings/by-global', N'', N'1', N'AbpApiDefinitionAggregator', NULL, N''), (N'10', N'{}', N'2035b334da4b450eaa3f0c4c54998d8b', N'TEST-APP', N'当前租户设置', N'1329709265255329792', N'setting-current-tenant,wechat-setting-current-tenant,', N'/api/setting-management/settings/by-current-tenant', N'', N'1', N'AbpApiDefinitionAggregator', NULL, N'')
GO
COMMIT
@@ -120,7 +120,7 @@ GO
BEGIN TRANSACTION
GO
-INSERT INTO [apigateway].[appapigatewayauthoptions] VALUES (N'3', N'1261299170387169280', NULL, N''), (N'4', N'1261585859064872960', NULL, N''), (N'5', N'1261586605810368512', NULL, N''), (N'6', N'1261587558609436672', NULL, N''), (N'7', N'1261588213298348032', NULL, N''), (N'8', N'1261588367619375104', NULL, N''), (N'9', N'1261588628450557952', NULL, N''), (N'10', N'1261588881564221440', NULL, N''), (N'11', N'1261588983053795328', NULL, N''), (N'12', N'1261589139039961088', NULL, N''), (N'13', N'1261589197483393024', NULL, N''), (N'14', N'1261589278857084928', NULL, N''), (N'15', N'1261589420356124672', NULL, N''), (N'16', N'1261589960393736192', NULL, N''), (N'17', N'1261606600242085888', NULL, N''), (N'18', N'1261606689601732608', NULL, N''), (N'21', N'1262220447629058048', NULL, N''), (N'22', N'1262230734939758592', NULL, N''), (N'23', N'1262296916350869504', NULL, N''), (N'24', N'1262632376348594176', N'', N''), (N'25', N'1262632791869902848', N'', N''), (N'28', N'1262660336921235456', N'', N''), (N'29', N'1262660528277966848', N'', N''), (N'30', N'1262660706875625472', N'', N''), (N'31', N'1262660966393991168', N'', N''), (N'32', N'1262661109474283520', N'', N''), (N'33', N'1262663888804663296', N'', N''), (N'34', N'1262664024096133120', N'', N''), (N'35', N'1262664186252120064', N'', N''), (N'36', N'1262664357044178944', N'', N''), (N'37', N'1262664632928718848', N'', N''), (N'38', N'1262664751409418240', N'', N''), (N'39', N'1262664871274237952', N'', N''), (N'40', N'1262665026111164416', N'', N''), (N'41', N'1262665159905267712', N'', N''), (N'42', N'1262665329829105664', N'', N''), (N'43', N'1262665456471920640', N'', N''), (N'44', N'1262665628165754880', N'', N''), (N'45', N'1262666172682883072', N'', N''), (N'47', N'1262723402331885568', N'', N''), (N'48', N'1262935771746734080', N'', N''), (N'49', N'1262935906522304512', N'', N''), (N'52', N'1263074419073593344', N'', N''), (N'53', N'1263075249394790400', N'', N''), (N'54', N'1263075593499684864', N'', N''), (N'56', N'1263101898440146944', N'', N''), (N'57', N'1263303878648569856', N'', N''), (N'58', N'1263304204797648896', N'', N''), (N'59', N'1263304872891555840', N'', N''), (N'60', N'1263305106250047488', N'', N''), (N'61', N'1263305244594970624', N'', N''), (N'62', N'1263305430536855552', N'', N''), (N'63', N'1263639172959174656', N'', N''), (N'64', N'1264799968944640000', N'', N''), (N'65', N'1264800070161584128', N'', N''), (N'66', N'1267360794414161920', N'', N''), (N'67', N'1267383367629807616', N'', N''), (N'68', N'1267817055527632896', N'', N''), (N'69', N'1267817221286526976', N'', N''), (N'70', N'1268893687085518848', N'', N''), (N'94', N'1288657613998579712', N'', N''), (N'95', N'1288657941770854400', N'', N''), (N'96', N'1288658134067109888', N'', N''), (N'97', N'1288658305156964352', N'', N''), (N'98', N'1288658491216289792', N'', N''), (N'99', N'1288658638302142464', N'', N''), (N'100', N'1288658791784308736', N'', N''), (N'101', N'1290849478956199936', N'', N''), (N'102', N'1290849628051124224', N'', N''), (N'103', N'1290849798553776128', N'', N''), (N'105', N'1291259822512693248', N'', N''), (N'106', N'1292620505149145088', N'', N''), (N'107', N'1292620665505775616', N'', N''), (N'108', N'1292620843398791168', N'', N''), (N'109', N'1292621027574874112', N'', N''), (N'110', N'1292621363161137152', N'', N''), (N'111', N'1292621494837116928', N'', N''), (N'112', N'1292621629260365824', N'', N''), (N'113', N'1292622526073864192', N'', N''), (N'114', N'1293470838745821184', N'', N''), (N'115', N'1293471661785706496', N'', N''), (N'116', N'1293472678392721408', N'', N''), (N'117', N'1293472857510473728', N'', N''), (N'118', N'1299273336009359360', N'', N''), (N'119', N'1299273436282585088', N'', N''), (N'120', N'1299273618470567936', N'', N''), (N'121', N'1299273770182737920', N'', N''), (N'122', N'1299273978023084032', N'', N''), (N'123', N'1299274123225694208', N'', N''), (N'124', N'1299274222299348992', N'', N''), (N'125', N'1304238876758495232', N'', N''), (N'126', N'1304678610343383040', N'', N''), (N'127', N'1304679169305694208', N'', N''), (N'128', N'1310460417141817344', N'', N''), (N'129', N'1310502391475519488', N'', N''), (N'130', N'1310515546943569920', N'', N''), (N'131', N'1310515735292985344', N'', N''), (N'132', N'1316628769783480320', N'', N''), (N'133', N'1316628940663619584', N'', N''), (N'134', N'1316629112428756992', N'', N''), (N'135', N'1316652047017246720', N'', N''), (N'136', N'1316913899996737536', N'', N''), (N'137', N'1319200951383199744', N'', N''), (N'138', N'1319221929807024128', N'', N''), (N'139', N'1319554431134306304', N'', N''), (N'140', N'1319554550458060800', N'', N''), (N'141', N'1319554948434595840', N'', N''), (N'142', N'1319555067183730688', N'', N''), (N'143', N'1319555230765780992', N'', N''), (N'144', N'1319555333790470144', N'', N''), (N'145', N'1321001932510203904', N'', N''), (N'146', N'1321002059803136000', N'', N''), (N'147', N'1321002256440496128', N'', N''), (N'148', N'1321002350686507008', N'', N''), (N'149', N'1322190027988525056', N'', N'')
+INSERT INTO [apigateway].[appapigatewayauthoptions] VALUES (N'3', N'1261299170387169280', NULL, N''), (N'4', N'1261585859064872960', NULL, N''), (N'5', N'1261586605810368512', NULL, N''), (N'6', N'1261587558609436672', NULL, N''), (N'7', N'1261588213298348032', NULL, N''), (N'8', N'1261588367619375104', NULL, N''), (N'9', N'1261588628450557952', NULL, N''), (N'10', N'1261588881564221440', NULL, N''), (N'11', N'1261588983053795328', NULL, N''), (N'12', N'1261589139039961088', NULL, N''), (N'13', N'1261589197483393024', NULL, N''), (N'14', N'1261589278857084928', NULL, N''), (N'15', N'1261589420356124672', NULL, N''), (N'16', N'1261589960393736192', NULL, N''), (N'17', N'1261606600242085888', NULL, N''), (N'18', N'1261606689601732608', NULL, N''), (N'21', N'1262220447629058048', NULL, N''), (N'22', N'1262230734939758592', NULL, N''), (N'23', N'1262296916350869504', NULL, N''), (N'24', N'1262632376348594176', N'', N''), (N'25', N'1262632791869902848', N'', N''), (N'28', N'1262660336921235456', N'', N''), (N'29', N'1262660528277966848', N'', N''), (N'30', N'1262660706875625472', N'', N''), (N'31', N'1262660966393991168', N'', N''), (N'32', N'1262661109474283520', N'', N''), (N'33', N'1262663888804663296', N'', N''), (N'34', N'1262664024096133120', N'', N''), (N'35', N'1262664186252120064', N'', N''), (N'36', N'1262664357044178944', N'', N''), (N'37', N'1262664632928718848', N'', N''), (N'38', N'1262664751409418240', N'', N''), (N'39', N'1262664871274237952', N'', N''), (N'40', N'1262665026111164416', N'', N''), (N'41', N'1262665159905267712', N'', N''), (N'42', N'1262665329829105664', N'', N''), (N'43', N'1262665456471920640', N'', N''), (N'44', N'1262665628165754880', N'', N''), (N'45', N'1262666172682883072', N'', N''), (N'47', N'1262723402331885568', N'', N''), (N'48', N'1262935771746734080', N'', N''), (N'49', N'1262935906522304512', N'', N''), (N'52', N'1263074419073593344', N'', N''), (N'53', N'1263075249394790400', N'', N''), (N'54', N'1263075593499684864', N'', N''), (N'56', N'1263101898440146944', N'', N''), (N'57', N'1263303878648569856', N'', N''), (N'58', N'1263304204797648896', N'', N''), (N'59', N'1263304872891555840', N'', N''), (N'60', N'1263305106250047488', N'', N''), (N'61', N'1263305244594970624', N'', N''), (N'62', N'1263305430536855552', N'', N''), (N'63', N'1263639172959174656', N'', N''), (N'64', N'1264799968944640000', N'', N''), (N'65', N'1264800070161584128', N'', N''), (N'66', N'1267360794414161920', N'', N''), (N'67', N'1267383367629807616', N'', N''), (N'68', N'1267817055527632896', N'', N''), (N'69', N'1267817221286526976', N'', N''), (N'70', N'1268893687085518848', N'', N''), (N'94', N'1288657613998579712', N'', N''), (N'95', N'1288657941770854400', N'', N''), (N'96', N'1288658134067109888', N'', N''), (N'97', N'1288658305156964352', N'', N''), (N'98', N'1288658491216289792', N'', N''), (N'99', N'1288658638302142464', N'', N''), (N'100', N'1288658791784308736', N'', N''), (N'101', N'1290849478956199936', N'', N''), (N'102', N'1290849628051124224', N'', N''), (N'103', N'1290849798553776128', N'', N''), (N'105', N'1291259822512693248', N'', N''), (N'106', N'1292620505149145088', N'', N''), (N'107', N'1292620665505775616', N'', N''), (N'108', N'1292620843398791168', N'', N''), (N'109', N'1292621027574874112', N'', N''), (N'110', N'1292621363161137152', N'', N''), (N'111', N'1292621494837116928', N'', N''), (N'112', N'1292621629260365824', N'', N''), (N'113', N'1292622526073864192', N'', N''), (N'114', N'1293470838745821184', N'', N''), (N'115', N'1293471661785706496', N'', N''), (N'116', N'1293472678392721408', N'', N''), (N'117', N'1293472857510473728', N'', N''), (N'118', N'1299273336009359360', N'', N''), (N'119', N'1299273436282585088', N'', N''), (N'120', N'1299273618470567936', N'', N''), (N'121', N'1299273770182737920', N'', N''), (N'122', N'1299273978023084032', N'', N''), (N'123', N'1299274123225694208', N'', N''), (N'124', N'1299274222299348992', N'', N''), (N'125', N'1304238876758495232', N'', N''), (N'126', N'1304678610343383040', N'', N''), (N'127', N'1304679169305694208', N'', N''), (N'128', N'1310460417141817344', N'', N''), (N'129', N'1310502391475519488', N'', N''), (N'130', N'1310515546943569920', N'', N''), (N'131', N'1310515735292985344', N'', N''), (N'132', N'1316628769783480320', N'', N''), (N'133', N'1316628940663619584', N'', N''), (N'134', N'1316629112428756992', N'', N''), (N'135', N'1316652047017246720', N'', N''), (N'136', N'1316913899996737536', N'', N''), (N'137', N'1319200951383199744', N'', N''), (N'138', N'1319221929807024128', N'', N''), (N'139', N'1319554431134306304', N'', N''), (N'140', N'1319554550458060800', N'', N''), (N'141', N'1319554948434595840', N'', N''), (N'142', N'1319555067183730688', N'', N''), (N'143', N'1319555230765780992', N'', N''), (N'144', N'1319555333790470144', N'', N''), (N'145', N'1321001932510203904', N'', N''), (N'146', N'1321002059803136000', N'', N''), (N'147', N'1321002256440496128', N'', N''), (N'148', N'1321002350686507008', N'', N''), (N'149', N'1322190027988525056', N'', N''), (N'150', N'1322452079688458240', N'', N''), (N'151', N'1322452183929495552', N'', N''), (N'152', N'1322452308651319296', N'', N''), (N'153', N'1322452858176446464', N'', N''), (N'154', N'1322452989235863552', N'', N''), (N'155', N'1322453089655889920', N'', N''), (N'156', N'1329706860249804800', N'', N''), (N'157', N'1329707002411544576', N'', N''), (N'158', N'1329708512277098496', N'', N''), (N'159', N'1329708625917571072', N'', N'')
GO
COMMIT
@@ -151,7 +151,7 @@ GO
BEGIN TRANSACTION
GO
-INSERT INTO [apigateway].[appapigatewaybalanceroptions] VALUES (N'1', N'1260841964962947072', NULL, N'LeastConnection', NULL, NULL), (N'4', NULL, N'1261299170387169280', N'LeastConnection', NULL, N'60000'), (N'5', NULL, N'1261585859064872960', NULL, NULL, NULL), (N'6', NULL, N'1261586605810368512', NULL, NULL, NULL), (N'7', NULL, N'1261587558609436672', NULL, NULL, NULL), (N'8', NULL, N'1261588213298348032', NULL, NULL, NULL), (N'9', NULL, N'1261588367619375104', NULL, NULL, NULL), (N'10', NULL, N'1261588628450557952', NULL, NULL, NULL), (N'11', NULL, N'1261588881564221440', NULL, NULL, NULL), (N'12', NULL, N'1261588983053795328', NULL, NULL, NULL), (N'13', NULL, N'1261589139039961088', NULL, NULL, NULL), (N'14', NULL, N'1261589197483393024', NULL, NULL, NULL), (N'15', NULL, N'1261589278857084928', NULL, NULL, NULL), (N'16', NULL, N'1261589420356124672', NULL, NULL, NULL), (N'17', NULL, N'1261589960393736192', N'LeastConnection', NULL, N'60000'), (N'18', NULL, N'1261606600242085888', NULL, NULL, NULL), (N'19', NULL, N'1261606689601732608', NULL, NULL, NULL), (N'22', NULL, N'1262220447629058048', NULL, NULL, NULL), (N'23', NULL, N'1262230734939758592', NULL, NULL, NULL), (N'24', NULL, N'1262296916350869504', NULL, NULL, NULL), (N'25', NULL, N'1262632376348594176', N'', N'', N'0'), (N'26', NULL, N'1262632791869902848', N'', N'', N'0'), (N'29', NULL, N'1262660336921235456', N'', N'', N'0'), (N'30', NULL, N'1262660528277966848', N'', N'', N'0'), (N'31', NULL, N'1262660706875625472', N'', N'', N'0'), (N'32', NULL, N'1262660966393991168', N'', N'', N'0'), (N'33', NULL, N'1262661109474283520', N'', N'', N'0'), (N'34', NULL, N'1262663888804663296', N'', N'', N'0'), (N'35', NULL, N'1262664024096133120', N'', N'', N'0'), (N'36', NULL, N'1262664186252120064', N'', N'', N'0'), (N'37', NULL, N'1262664357044178944', N'', N'', N'0'), (N'38', NULL, N'1262664632928718848', N'', N'', N'0'), (N'39', NULL, N'1262664751409418240', N'', N'', N'0'), (N'40', NULL, N'1262664871274237952', N'', N'', N'0'), (N'41', NULL, N'1262665026111164416', N'', N'', N'0'), (N'42', NULL, N'1262665159905267712', N'', N'', N'0'), (N'43', NULL, N'1262665329829105664', N'', N'', N'0'), (N'44', NULL, N'1262665456471920640', N'', N'', N'0'), (N'45', NULL, N'1262665628165754880', N'', N'', N'0'), (N'46', NULL, N'1262666172682883072', N'', N'', N'0'), (N'48', NULL, N'1262723402331885568', N'', N'', N'0'), (N'49', NULL, N'1262935771746734080', N'', N'', N'0'), (N'50', NULL, N'1262935906522304512', N'', N'', N'0'), (N'53', NULL, N'1263074419073593344', N'', N'', N'0'), (N'54', NULL, N'1263075249394790400', N'', N'', N'0'), (N'55', NULL, N'1263075593499684864', N'', N'', N'0'), (N'57', NULL, N'1263101898440146944', N'', N'', N'0'), (N'58', NULL, N'1263303878648569856', N'', N'', N'0'), (N'59', NULL, N'1263304204797648896', N'', N'', N'0'), (N'60', NULL, N'1263304872891555840', N'', N'', N'0'), (N'61', NULL, N'1263305106250047488', N'', N'', N'0'), (N'62', NULL, N'1263305244594970624', N'', N'', N'0'), (N'63', NULL, N'1263305430536855552', N'', N'', N'0'), (N'64', NULL, N'1263639172959174656', N'', N'', N'0'), (N'65', NULL, N'1264799968944640000', N'', N'', N'0'), (N'66', NULL, N'1264800070161584128', N'', N'', N'0'), (N'68', NULL, N'1267360794414161920', N'', N'', N'0'), (N'69', NULL, N'1267383367629807616', N'', N'', N'0'), (N'70', NULL, N'1267817055527632896', N'', N'', N'0'), (N'71', NULL, N'1267817221286526976', N'', N'', N'0'), (N'72', NULL, N'1268893687085518848', N'', N'', N'0'), (N'97', NULL, N'1288657613998579712', N'LeastConnection', N'', N'60000'), (N'98', NULL, N'1288657941770854400', N'', N'', N'0'), (N'99', NULL, N'1288658134067109888', N'', N'', N'0'), (N'100', NULL, N'1288658305156964352', N'', N'', N'0'), (N'101', NULL, N'1288658491216289792', N'', N'', N'0'), (N'102', NULL, N'1288658638302142464', N'', N'', N'0'), (N'103', NULL, N'1288658791784308736', N'', N'', N'0'), (N'104', NULL, N'1290849478956199936', N'', N'', N'0'), (N'105', NULL, N'1290849628051124224', N'', N'', N'0'), (N'106', NULL, N'1290849798553776128', N'', N'', N'0'), (N'108', NULL, N'1291259822512693248', N'', N'', N'0'), (N'109', NULL, N'1292620505149145088', N'', N'', N'0'), (N'110', NULL, N'1292620665505775616', N'', N'', N'0'), (N'111', NULL, N'1292620843398791168', N'', N'', N'0'), (N'112', NULL, N'1292621027574874112', N'', N'', N'0'), (N'113', NULL, N'1292621363161137152', N'', N'', N'0'), (N'114', NULL, N'1292621494837116928', N'', N'', N'0'), (N'115', NULL, N'1292621629260365824', N'', N'', N'0'), (N'116', NULL, N'1292622526073864192', N'', N'', N'0'), (N'117', NULL, N'1293470838745821184', N'', N'', N'0'), (N'118', NULL, N'1293471661785706496', N'', N'', N'0'), (N'119', NULL, N'1293472678392721408', N'', N'', N'0'), (N'120', NULL, N'1293472857510473728', N'', N'', N'0'), (N'121', NULL, N'1299273336009359360', N'', N'', N'0'), (N'122', NULL, N'1299273436282585088', N'', N'', N'0'), (N'123', NULL, N'1299273618470567936', N'', N'', N'0'), (N'124', NULL, N'1299273770182737920', N'', N'', N'0'), (N'125', NULL, N'1299273978023084032', N'', N'', N'0'), (N'126', NULL, N'1299274123225694208', N'', N'', N'0'), (N'127', NULL, N'1299274222299348992', N'', N'', N'0'), (N'128', NULL, N'1304238876758495232', N'', N'', N'0'), (N'129', NULL, N'1304678610343383040', N'', N'', N'0'), (N'130', NULL, N'1304679169305694208', N'', N'', N'0'), (N'131', NULL, N'1310460417141817344', N'', N'', N'0'), (N'132', NULL, N'1310502391475519488', N'', N'', N'0'), (N'133', NULL, N'1310515546943569920', N'', N'', N'0'), (N'134', NULL, N'1310515735292985344', N'', N'', N'0'), (N'135', NULL, N'1316628769783480320', N'', N'', N'0'), (N'136', NULL, N'1316628940663619584', N'', N'', N'0'), (N'137', NULL, N'1316629112428756992', N'', N'', N'0'), (N'138', NULL, N'1316652047017246720', N'', N'', N'0'), (N'139', NULL, N'1316913899996737536', N'', N'', N'0'), (N'140', NULL, N'1319200951383199744', N'', N'', N'0'), (N'141', NULL, N'1319221929807024128', N'', N'', N'0'), (N'142', NULL, N'1319554431134306304', N'', N'', N'0'), (N'143', NULL, N'1319554550458060800', N'', N'', N'0'), (N'144', NULL, N'1319554948434595840', N'', N'', N'0'), (N'145', NULL, N'1319555067183730688', N'', N'', N'0'), (N'146', NULL, N'1319555230765780992', N'', N'', N'0'), (N'147', NULL, N'1319555333790470144', N'', N'', N'0'), (N'148', NULL, N'1321001932510203904', N'', N'', N'0'), (N'149', NULL, N'1321002059803136000', N'', N'', N'0'), (N'150', NULL, N'1321002256440496128', N'', N'', N'0'), (N'151', NULL, N'1321002350686507008', N'', N'', N'0'), (N'152', NULL, N'1322190027988525056', N'', N'', N'0')
+INSERT INTO [apigateway].[appapigatewaybalanceroptions] VALUES (N'1', N'1260841964962947072', NULL, N'LeastConnection', NULL, NULL), (N'4', NULL, N'1261299170387169280', N'LeastConnection', NULL, N'60000'), (N'5', NULL, N'1261585859064872960', NULL, NULL, NULL), (N'6', NULL, N'1261586605810368512', NULL, NULL, NULL), (N'7', NULL, N'1261587558609436672', NULL, NULL, NULL), (N'8', NULL, N'1261588213298348032', NULL, NULL, NULL), (N'9', NULL, N'1261588367619375104', NULL, NULL, NULL), (N'10', NULL, N'1261588628450557952', NULL, NULL, NULL), (N'11', NULL, N'1261588881564221440', NULL, NULL, NULL), (N'12', NULL, N'1261588983053795328', NULL, NULL, NULL), (N'13', NULL, N'1261589139039961088', NULL, NULL, NULL), (N'14', NULL, N'1261589197483393024', NULL, NULL, NULL), (N'15', NULL, N'1261589278857084928', NULL, NULL, NULL), (N'16', NULL, N'1261589420356124672', NULL, NULL, NULL), (N'17', NULL, N'1261589960393736192', N'LeastConnection', NULL, N'60000'), (N'18', NULL, N'1261606600242085888', NULL, NULL, NULL), (N'19', NULL, N'1261606689601732608', NULL, NULL, NULL), (N'22', NULL, N'1262220447629058048', NULL, NULL, NULL), (N'23', NULL, N'1262230734939758592', NULL, NULL, NULL), (N'24', NULL, N'1262296916350869504', NULL, NULL, NULL), (N'25', NULL, N'1262632376348594176', N'', N'', N'0'), (N'26', NULL, N'1262632791869902848', N'', N'', N'0'), (N'29', NULL, N'1262660336921235456', N'', N'', N'0'), (N'30', NULL, N'1262660528277966848', N'', N'', N'0'), (N'31', NULL, N'1262660706875625472', N'', N'', N'0'), (N'32', NULL, N'1262660966393991168', N'', N'', N'0'), (N'33', NULL, N'1262661109474283520', N'', N'', N'0'), (N'34', NULL, N'1262663888804663296', N'', N'', N'0'), (N'35', NULL, N'1262664024096133120', N'', N'', N'0'), (N'36', NULL, N'1262664186252120064', N'', N'', N'0'), (N'37', NULL, N'1262664357044178944', N'', N'', N'0'), (N'38', NULL, N'1262664632928718848', N'', N'', N'0'), (N'39', NULL, N'1262664751409418240', N'', N'', N'0'), (N'40', NULL, N'1262664871274237952', N'', N'', N'0'), (N'41', NULL, N'1262665026111164416', N'', N'', N'0'), (N'42', NULL, N'1262665159905267712', N'', N'', N'0'), (N'43', NULL, N'1262665329829105664', N'', N'', N'0'), (N'44', NULL, N'1262665456471920640', N'', N'', N'0'), (N'45', NULL, N'1262665628165754880', N'', N'', N'0'), (N'46', NULL, N'1262666172682883072', N'', N'', N'0'), (N'48', NULL, N'1262723402331885568', N'', N'', N'0'), (N'49', NULL, N'1262935771746734080', N'', N'', N'0'), (N'50', NULL, N'1262935906522304512', N'', N'', N'0'), (N'53', NULL, N'1263074419073593344', N'', N'', N'0'), (N'54', NULL, N'1263075249394790400', N'', N'', N'0'), (N'55', NULL, N'1263075593499684864', N'', N'', N'0'), (N'57', NULL, N'1263101898440146944', N'', N'', N'0'), (N'58', NULL, N'1263303878648569856', N'', N'', N'0'), (N'59', NULL, N'1263304204797648896', N'', N'', N'0'), (N'60', NULL, N'1263304872891555840', N'', N'', N'0'), (N'61', NULL, N'1263305106250047488', N'', N'', N'0'), (N'62', NULL, N'1263305244594970624', N'', N'', N'0'), (N'63', NULL, N'1263305430536855552', N'', N'', N'0'), (N'64', NULL, N'1263639172959174656', N'', N'', N'0'), (N'65', NULL, N'1264799968944640000', N'', N'', N'0'), (N'66', NULL, N'1264800070161584128', N'', N'', N'0'), (N'68', NULL, N'1267360794414161920', N'', N'', N'0'), (N'69', NULL, N'1267383367629807616', N'', N'', N'0'), (N'70', NULL, N'1267817055527632896', N'', N'', N'0'), (N'71', NULL, N'1267817221286526976', N'', N'', N'0'), (N'72', NULL, N'1268893687085518848', N'', N'', N'0'), (N'97', NULL, N'1288657613998579712', N'LeastConnection', N'', N'60000'), (N'98', NULL, N'1288657941770854400', N'', N'', N'0'), (N'99', NULL, N'1288658134067109888', N'', N'', N'0'), (N'100', NULL, N'1288658305156964352', N'', N'', N'0'), (N'101', NULL, N'1288658491216289792', N'', N'', N'0'), (N'102', NULL, N'1288658638302142464', N'', N'', N'0'), (N'103', NULL, N'1288658791784308736', N'', N'', N'0'), (N'104', NULL, N'1290849478956199936', N'', N'', N'0'), (N'105', NULL, N'1290849628051124224', N'', N'', N'0'), (N'106', NULL, N'1290849798553776128', N'', N'', N'0'), (N'108', NULL, N'1291259822512693248', N'', N'', N'0'), (N'109', NULL, N'1292620505149145088', N'', N'', N'0'), (N'110', NULL, N'1292620665505775616', N'', N'', N'0'), (N'111', NULL, N'1292620843398791168', N'', N'', N'0'), (N'112', NULL, N'1292621027574874112', N'', N'', N'0'), (N'113', NULL, N'1292621363161137152', N'', N'', N'0'), (N'114', NULL, N'1292621494837116928', N'', N'', N'0'), (N'115', NULL, N'1292621629260365824', N'', N'', N'0'), (N'116', NULL, N'1292622526073864192', N'', N'', N'0'), (N'117', NULL, N'1293470838745821184', N'', N'', N'0'), (N'118', NULL, N'1293471661785706496', N'', N'', N'0'), (N'119', NULL, N'1293472678392721408', N'', N'', N'0'), (N'120', NULL, N'1293472857510473728', N'', N'', N'0'), (N'121', NULL, N'1299273336009359360', N'', N'', N'0'), (N'122', NULL, N'1299273436282585088', N'', N'', N'0'), (N'123', NULL, N'1299273618470567936', N'', N'', N'0'), (N'124', NULL, N'1299273770182737920', N'', N'', N'0'), (N'125', NULL, N'1299273978023084032', N'', N'', N'0'), (N'126', NULL, N'1299274123225694208', N'', N'', N'0'), (N'127', NULL, N'1299274222299348992', N'', N'', N'0'), (N'128', NULL, N'1304238876758495232', N'', N'', N'0'), (N'129', NULL, N'1304678610343383040', N'', N'', N'0'), (N'130', NULL, N'1304679169305694208', N'', N'', N'0'), (N'131', NULL, N'1310460417141817344', N'', N'', N'0'), (N'132', NULL, N'1310502391475519488', N'', N'', N'0'), (N'133', NULL, N'1310515546943569920', N'', N'', N'0'), (N'134', NULL, N'1310515735292985344', N'', N'', N'0'), (N'135', NULL, N'1316628769783480320', N'', N'', N'0'), (N'136', NULL, N'1316628940663619584', N'', N'', N'0'), (N'137', NULL, N'1316629112428756992', N'', N'', N'0'), (N'138', NULL, N'1316652047017246720', N'', N'', N'0'), (N'139', NULL, N'1316913899996737536', N'', N'', N'0'), (N'140', NULL, N'1319200951383199744', N'', N'', N'0'), (N'141', NULL, N'1319221929807024128', N'', N'', N'0'), (N'142', NULL, N'1319554431134306304', N'', N'', N'0'), (N'143', NULL, N'1319554550458060800', N'', N'', N'0'), (N'144', NULL, N'1319554948434595840', N'', N'', N'0'), (N'145', NULL, N'1319555067183730688', N'', N'', N'0'), (N'146', NULL, N'1319555230765780992', N'', N'', N'0'), (N'147', NULL, N'1319555333790470144', N'', N'', N'0'), (N'148', NULL, N'1321001932510203904', N'', N'', N'0'), (N'149', NULL, N'1321002059803136000', N'', N'', N'0'), (N'150', NULL, N'1321002256440496128', N'', N'', N'0'), (N'151', NULL, N'1321002350686507008', N'', N'', N'0'), (N'152', NULL, N'1322190027988525056', N'', N'', N'0'), (N'153', NULL, N'1322452079688458240', N'', N'', N'0'), (N'154', NULL, N'1322452183929495552', N'', N'', N'0'), (N'155', NULL, N'1322452308651319296', N'', N'', N'0'), (N'156', NULL, N'1322452858176446464', N'', N'', N'0'), (N'157', NULL, N'1322452989235863552', N'', N'', N'0'), (N'158', NULL, N'1322453089655889920', N'', N'', N'0'), (N'159', NULL, N'1329706860249804800', N'', N'', N'0'), (N'160', NULL, N'1329707002411544576', N'', N'', N'0'), (N'161', NULL, N'1329708512277098496', N'', N'', N'0'), (N'162', NULL, N'1329708625917571072', N'', N'', N'0')
GO
COMMIT
@@ -180,7 +180,7 @@ GO
BEGIN TRANSACTION
GO
-INSERT INTO [apigateway].[appapigatewaycacheoptions] VALUES (N'3', N'1261299170387169280', NULL, NULL), (N'4', N'1261585859064872960', NULL, NULL), (N'5', N'1261586605810368512', NULL, NULL), (N'6', N'1261587558609436672', NULL, NULL), (N'7', N'1261588213298348032', NULL, NULL), (N'8', N'1261588367619375104', NULL, NULL), (N'9', N'1261588628450557952', NULL, NULL), (N'10', N'1261588881564221440', NULL, NULL), (N'11', N'1261588983053795328', NULL, NULL), (N'12', N'1261589139039961088', NULL, NULL), (N'13', N'1261589197483393024', NULL, NULL), (N'14', N'1261589278857084928', NULL, NULL), (N'15', N'1261589420356124672', NULL, NULL), (N'16', N'1261589960393736192', NULL, NULL), (N'17', N'1261606600242085888', NULL, NULL), (N'18', N'1261606689601732608', NULL, NULL), (N'21', N'1262220447629058048', NULL, NULL), (N'22', N'1262230734939758592', NULL, NULL), (N'23', N'1262296916350869504', NULL, NULL), (N'24', N'1262632376348594176', NULL, NULL), (N'25', N'1262632791869902848', NULL, NULL), (N'28', N'1262660336921235456', N'0', N''), (N'29', N'1262660528277966848', N'0', N''), (N'30', N'1262660706875625472', N'0', N''), (N'31', N'1262660966393991168', N'0', N''), (N'32', N'1262661109474283520', N'0', N''), (N'33', N'1262663888804663296', N'0', N''), (N'34', N'1262664024096133120', N'0', N''), (N'35', N'1262664186252120064', N'0', N''), (N'36', N'1262664357044178944', N'0', N''), (N'37', N'1262664632928718848', N'0', N''), (N'38', N'1262664751409418240', N'0', N''), (N'39', N'1262664871274237952', N'0', N''), (N'40', N'1262665026111164416', N'0', N''), (N'41', N'1262665159905267712', N'0', N''), (N'42', N'1262665329829105664', N'0', N''), (N'43', N'1262665456471920640', N'0', N''), (N'44', N'1262665628165754880', NULL, NULL), (N'45', N'1262666172682883072', NULL, NULL), (N'47', N'1262723402331885568', NULL, NULL), (N'48', N'1262935771746734080', NULL, NULL), (N'49', N'1262935906522304512', NULL, NULL), (N'52', N'1263074419073593344', NULL, NULL), (N'53', N'1263075249394790400', N'0', N''), (N'54', N'1263075593499684864', N'0', N''), (N'56', N'1263101898440146944', NULL, NULL), (N'57', N'1263303878648569856', NULL, NULL), (N'58', N'1263304204797648896', NULL, NULL), (N'59', N'1263304872891555840', NULL, NULL), (N'60', N'1263305106250047488', NULL, NULL), (N'61', N'1263305244594970624', NULL, NULL), (N'62', N'1263305430536855552', NULL, NULL), (N'63', N'1263639172959174656', NULL, NULL), (N'64', N'1264799968944640000', NULL, NULL), (N'65', N'1264800070161584128', NULL, NULL), (N'66', N'1267360794414161920', NULL, NULL), (N'67', N'1267383367629807616', NULL, NULL), (N'68', N'1267817055527632896', NULL, NULL), (N'69', N'1267817221286526976', NULL, NULL), (N'70', N'1268893687085518848', NULL, NULL), (N'94', N'1288657613998579712', NULL, NULL), (N'95', N'1288657941770854400', N'0', N''), (N'96', N'1288658134067109888', N'0', N''), (N'97', N'1288658305156964352', N'0', N''), (N'98', N'1288658491216289792', N'0', N''), (N'99', N'1288658638302142464', NULL, NULL), (N'100', N'1288658791784308736', NULL, NULL), (N'101', N'1290849478956199936', NULL, NULL), (N'102', N'1290849628051124224', NULL, NULL), (N'103', N'1290849798553776128', NULL, NULL), (N'105', N'1291259822512693248', N'0', N''), (N'106', N'1292620505149145088', N'0', N''), (N'107', N'1292620665505775616', N'0', N''), (N'108', N'1292620843398791168', NULL, NULL), (N'109', N'1292621027574874112', N'0', N''), (N'110', N'1292621363161137152', N'0', N''), (N'111', N'1292621494837116928', N'0', N''), (N'112', N'1292621629260365824', N'0', N''), (N'113', N'1292622526073864192', N'0', N''), (N'114', N'1293470838745821184', N'0', N''), (N'115', N'1293471661785706496', N'0', N''), (N'116', N'1293472678392721408', N'0', N''), (N'117', N'1293472857510473728', N'0', N''), (N'118', N'1299273336009359360', NULL, NULL), (N'119', N'1299273436282585088', NULL, NULL), (N'120', N'1299273618470567936', NULL, NULL), (N'121', N'1299273770182737920', NULL, NULL), (N'122', N'1299273978023084032', NULL, NULL), (N'123', N'1299274123225694208', NULL, NULL), (N'124', N'1299274222299348992', NULL, NULL), (N'125', N'1304238876758495232', N'0', N''), (N'126', N'1304678610343383040', NULL, NULL), (N'127', N'1304679169305694208', NULL, NULL), (N'128', N'1310460417141817344', N'0', N''), (N'129', N'1310502391475519488', N'0', N''), (N'130', N'1310515546943569920', NULL, NULL), (N'131', N'1310515735292985344', NULL, NULL), (N'132', N'1316628769783480320', N'0', N''), (N'133', N'1316628940663619584', N'0', N''), (N'134', N'1316629112428756992', N'0', N''), (N'135', N'1316652047017246720', N'0', N''), (N'136', N'1316913899996737536', N'0', N''), (N'137', N'1319200951383199744', N'0', N''), (N'138', N'1319221929807024128', N'0', N''), (N'139', N'1319554431134306304', NULL, NULL), (N'140', N'1319554550458060800', NULL, NULL), (N'141', N'1319554948434595840', N'0', N''), (N'142', N'1319555067183730688', N'0', N''), (N'143', N'1319555230765780992', N'0', N''), (N'144', N'1319555333790470144', N'0', N''), (N'145', N'1321001932510203904', N'0', N''), (N'146', N'1321002059803136000', N'0', N''), (N'147', N'1321002256440496128', N'0', N''), (N'148', N'1321002350686507008', N'0', N''), (N'149', N'1322190027988525056', N'0', N'')
+INSERT INTO [apigateway].[appapigatewaycacheoptions] VALUES (N'3', N'1261299170387169280', NULL, NULL), (N'4', N'1261585859064872960', NULL, NULL), (N'5', N'1261586605810368512', NULL, NULL), (N'6', N'1261587558609436672', NULL, NULL), (N'7', N'1261588213298348032', NULL, NULL), (N'8', N'1261588367619375104', NULL, NULL), (N'9', N'1261588628450557952', NULL, NULL), (N'10', N'1261588881564221440', NULL, NULL), (N'11', N'1261588983053795328', NULL, NULL), (N'12', N'1261589139039961088', NULL, NULL), (N'13', N'1261589197483393024', NULL, NULL), (N'14', N'1261589278857084928', NULL, NULL), (N'15', N'1261589420356124672', NULL, NULL), (N'16', N'1261589960393736192', NULL, NULL), (N'17', N'1261606600242085888', NULL, NULL), (N'18', N'1261606689601732608', NULL, NULL), (N'21', N'1262220447629058048', NULL, NULL), (N'22', N'1262230734939758592', NULL, NULL), (N'23', N'1262296916350869504', NULL, NULL), (N'24', N'1262632376348594176', NULL, NULL), (N'25', N'1262632791869902848', NULL, NULL), (N'28', N'1262660336921235456', N'0', N''), (N'29', N'1262660528277966848', N'0', N''), (N'30', N'1262660706875625472', N'0', N''), (N'31', N'1262660966393991168', N'0', N''), (N'32', N'1262661109474283520', N'0', N''), (N'33', N'1262663888804663296', N'0', N''), (N'34', N'1262664024096133120', N'0', N''), (N'35', N'1262664186252120064', N'0', N''), (N'36', N'1262664357044178944', N'0', N''), (N'37', N'1262664632928718848', N'0', N''), (N'38', N'1262664751409418240', N'0', N''), (N'39', N'1262664871274237952', N'0', N''), (N'40', N'1262665026111164416', N'0', N''), (N'41', N'1262665159905267712', N'0', N''), (N'42', N'1262665329829105664', N'0', N''), (N'43', N'1262665456471920640', N'0', N''), (N'44', N'1262665628165754880', NULL, NULL), (N'45', N'1262666172682883072', NULL, NULL), (N'47', N'1262723402331885568', NULL, NULL), (N'48', N'1262935771746734080', NULL, NULL), (N'49', N'1262935906522304512', NULL, NULL), (N'52', N'1263074419073593344', NULL, NULL), (N'53', N'1263075249394790400', N'0', N''), (N'54', N'1263075593499684864', N'0', N''), (N'56', N'1263101898440146944', NULL, NULL), (N'57', N'1263303878648569856', NULL, NULL), (N'58', N'1263304204797648896', NULL, NULL), (N'59', N'1263304872891555840', NULL, NULL), (N'60', N'1263305106250047488', NULL, NULL), (N'61', N'1263305244594970624', NULL, NULL), (N'62', N'1263305430536855552', NULL, NULL), (N'63', N'1263639172959174656', NULL, NULL), (N'64', N'1264799968944640000', NULL, NULL), (N'65', N'1264800070161584128', NULL, NULL), (N'66', N'1267360794414161920', NULL, NULL), (N'67', N'1267383367629807616', NULL, NULL), (N'68', N'1267817055527632896', NULL, NULL), (N'69', N'1267817221286526976', NULL, NULL), (N'70', N'1268893687085518848', NULL, NULL), (N'94', N'1288657613998579712', NULL, NULL), (N'95', N'1288657941770854400', N'0', N''), (N'96', N'1288658134067109888', N'0', N''), (N'97', N'1288658305156964352', N'0', N''), (N'98', N'1288658491216289792', N'0', N''), (N'99', N'1288658638302142464', NULL, NULL), (N'100', N'1288658791784308736', NULL, NULL), (N'101', N'1290849478956199936', NULL, NULL), (N'102', N'1290849628051124224', NULL, NULL), (N'103', N'1290849798553776128', NULL, NULL), (N'105', N'1291259822512693248', N'0', N''), (N'106', N'1292620505149145088', N'0', N''), (N'107', N'1292620665505775616', N'0', N''), (N'108', N'1292620843398791168', NULL, NULL), (N'109', N'1292621027574874112', N'0', N''), (N'110', N'1292621363161137152', N'0', N''), (N'111', N'1292621494837116928', N'0', N''), (N'112', N'1292621629260365824', N'0', N''), (N'113', N'1292622526073864192', N'0', N''), (N'114', N'1293470838745821184', N'0', N''), (N'115', N'1293471661785706496', N'0', N''), (N'116', N'1293472678392721408', N'0', N''), (N'117', N'1293472857510473728', N'0', N''), (N'118', N'1299273336009359360', NULL, NULL), (N'119', N'1299273436282585088', NULL, NULL), (N'120', N'1299273618470567936', NULL, NULL), (N'121', N'1299273770182737920', NULL, NULL), (N'122', N'1299273978023084032', NULL, NULL), (N'123', N'1299274123225694208', NULL, NULL), (N'124', N'1299274222299348992', NULL, NULL), (N'125', N'1304238876758495232', N'0', N''), (N'126', N'1304678610343383040', NULL, NULL), (N'127', N'1304679169305694208', NULL, NULL), (N'128', N'1310460417141817344', N'0', N''), (N'129', N'1310502391475519488', N'0', N''), (N'130', N'1310515546943569920', NULL, NULL), (N'131', N'1310515735292985344', NULL, NULL), (N'132', N'1316628769783480320', N'0', N''), (N'133', N'1316628940663619584', N'0', N''), (N'134', N'1316629112428756992', N'0', N''), (N'135', N'1316652047017246720', N'0', N''), (N'136', N'1316913899996737536', N'0', N''), (N'137', N'1319200951383199744', N'0', N''), (N'138', N'1319221929807024128', N'0', N''), (N'139', N'1319554431134306304', NULL, NULL), (N'140', N'1319554550458060800', NULL, NULL), (N'141', N'1319554948434595840', N'0', N''), (N'142', N'1319555067183730688', N'0', N''), (N'143', N'1319555230765780992', N'0', N''), (N'144', N'1319555333790470144', N'0', N''), (N'145', N'1321001932510203904', N'0', N''), (N'146', N'1321002059803136000', N'0', N''), (N'147', N'1321002256440496128', N'0', N''), (N'148', N'1321002350686507008', N'0', N''), (N'149', N'1322190027988525056', N'0', N''), (N'150', N'1322452079688458240', NULL, NULL), (N'151', N'1322452183929495552', NULL, NULL), (N'152', N'1322452308651319296', NULL, NULL), (N'153', N'1322452858176446464', N'0', N''), (N'154', N'1322452989235863552', N'0', N''), (N'155', N'1322453089655889920', NULL, NULL), (N'156', N'1329706860249804800', N'0', N''), (N'157', N'1329707002411544576', N'0', N''), (N'158', N'1329708512277098496', N'0', N''), (N'159', N'1329708625917571072', N'0', N'')
GO
COMMIT
@@ -335,7 +335,7 @@ GO
BEGIN TRANSACTION
GO
-INSERT INTO [apigateway].[appapigatewayhttpoptions] VALUES (N'1', N'1260841964962947072', NULL, NULL, N'0', N'0', N'1', N'0'), (N'4', NULL, N'1261299170387169280', N'1000', N'1', N'0', N'1', N'0'), (N'5', NULL, N'1261585859064872960', NULL, N'0', N'0', N'1', N'0'), (N'6', NULL, N'1261586605810368512', NULL, N'0', N'0', N'0', N'0'), (N'7', NULL, N'1261587558609436672', NULL, N'0', N'0', N'0', N'0'), (N'8', NULL, N'1261588213298348032', NULL, N'0', N'0', N'0', N'0'), (N'9', NULL, N'1261588367619375104', NULL, N'0', N'0', N'0', N'0'), (N'10', NULL, N'1261588628450557952', NULL, N'0', N'0', N'0', N'0'), (N'11', NULL, N'1261588881564221440', NULL, N'0', N'0', N'0', N'0'), (N'12', NULL, N'1261588983053795328', NULL, N'0', N'0', N'0', N'0'), (N'13', NULL, N'1261589139039961088', NULL, N'0', N'0', N'0', N'0'), (N'14', NULL, N'1261589197483393024', NULL, N'0', N'0', N'0', N'0'), (N'15', NULL, N'1261589278857084928', NULL, N'0', N'0', N'0', N'0'), (N'16', NULL, N'1261589420356124672', NULL, N'0', N'0', N'0', N'0'), (N'17', NULL, N'1261589960393736192', N'1000', N'1', N'0', N'1', N'0'), (N'18', NULL, N'1261606600242085888', NULL, N'0', N'0', N'0', N'0'), (N'19', NULL, N'1261606689601732608', NULL, N'0', N'0', N'0', N'0'), (N'22', NULL, N'1262220447629058048', NULL, N'0', N'0', N'1', N'0'), (N'23', NULL, N'1262230734939758592', NULL, N'0', N'0', N'1', N'0'), (N'24', NULL, N'1262296916350869504', NULL, N'0', N'0', N'1', N'0'), (N'25', NULL, N'1262632376348594176', N'0', N'0', N'0', N'0', N'0'), (N'26', NULL, N'1262632791869902848', N'0', N'0', N'0', N'0', N'0'), (N'29', NULL, N'1262660336921235456', N'0', N'0', N'0', N'0', N'0'), (N'30', NULL, N'1262660528277966848', N'0', N'0', N'0', N'0', N'0'), (N'31', NULL, N'1262660706875625472', N'0', N'0', N'0', N'0', N'0'), (N'32', NULL, N'1262660966393991168', N'0', N'0', N'0', N'0', N'0'), (N'33', NULL, N'1262661109474283520', N'0', N'0', N'0', N'0', N'0'), (N'34', NULL, N'1262663888804663296', N'0', N'0', N'0', N'0', N'0'), (N'35', NULL, N'1262664024096133120', N'0', N'0', N'0', N'0', N'0'), (N'36', NULL, N'1262664186252120064', N'0', N'0', N'0', N'0', N'0'), (N'37', NULL, N'1262664357044178944', N'0', N'0', N'0', N'0', N'0'), (N'38', NULL, N'1262664632928718848', N'0', N'0', N'0', N'0', N'0'), (N'39', NULL, N'1262664751409418240', N'0', N'0', N'0', N'0', N'0'), (N'40', NULL, N'1262664871274237952', N'0', N'0', N'0', N'0', N'0'), (N'41', NULL, N'1262665026111164416', N'0', N'0', N'0', N'0', N'0'), (N'42', NULL, N'1262665159905267712', N'0', N'0', N'0', N'0', N'0'), (N'43', NULL, N'1262665329829105664', N'0', N'0', N'0', N'0', N'0'), (N'44', NULL, N'1262665456471920640', N'0', N'0', N'0', N'0', N'0'), (N'45', NULL, N'1262665628165754880', N'0', N'0', N'0', N'0', N'0'), (N'46', NULL, N'1262666172682883072', N'0', N'0', N'0', N'0', N'0'), (N'48', NULL, N'1262723402331885568', N'0', N'0', N'0', N'0', N'0'), (N'49', NULL, N'1262935771746734080', N'0', N'0', N'0', N'0', N'0'), (N'50', NULL, N'1262935906522304512', N'0', N'0', N'0', N'0', N'0'), (N'53', NULL, N'1263074419073593344', N'0', N'0', N'0', N'0', N'0'), (N'54', NULL, N'1263075249394790400', N'0', N'0', N'0', N'0', N'0'), (N'55', NULL, N'1263075593499684864', N'0', N'0', N'0', N'0', N'0'), (N'57', NULL, N'1263101898440146944', N'0', N'0', N'0', N'0', N'0'), (N'58', NULL, N'1263303878648569856', N'0', N'0', N'0', N'0', N'0'), (N'59', NULL, N'1263304204797648896', N'0', N'0', N'0', N'0', N'0'), (N'60', NULL, N'1263304872891555840', N'0', N'0', N'0', N'0', N'0'), (N'61', NULL, N'1263305106250047488', N'0', N'0', N'0', N'0', N'0'), (N'62', NULL, N'1263305244594970624', N'0', N'0', N'0', N'0', N'0'), (N'63', NULL, N'1263305430536855552', N'0', N'0', N'0', N'0', N'0'), (N'64', NULL, N'1263639172959174656', N'0', N'0', N'0', N'0', N'0'), (N'65', NULL, N'1264799968944640000', N'0', N'0', N'0', N'0', N'0'), (N'66', NULL, N'1264800070161584128', N'0', N'0', N'0', N'0', N'0'), (N'68', NULL, N'1267360794414161920', N'0', N'0', N'0', N'0', N'0'), (N'69', NULL, N'1267383367629807616', N'0', N'0', N'0', N'0', N'0'), (N'70', NULL, N'1267817055527632896', N'0', N'0', N'0', N'0', N'0'), (N'71', NULL, N'1267817221286526976', N'0', N'0', N'0', N'0', N'0'), (N'72', NULL, N'1268893687085518848', N'0', N'0', N'0', N'0', N'0'), (N'97', NULL, N'1288657613998579712', N'1000', N'0', N'0', N'0', N'0'), (N'98', NULL, N'1288657941770854400', N'1000', N'0', N'0', N'0', N'0'), (N'99', NULL, N'1288658134067109888', N'1000', N'0', N'0', N'0', N'0'), (N'100', NULL, N'1288658305156964352', N'1000', N'0', N'0', N'0', N'0'), (N'101', NULL, N'1288658491216289792', N'1000', N'0', N'0', N'0', N'0'), (N'102', NULL, N'1288658638302142464', N'1000', N'0', N'0', N'0', N'0'), (N'103', NULL, N'1288658791784308736', N'1000', N'0', N'0', N'0', N'0'), (N'104', NULL, N'1290849478956199936', N'0', N'0', N'0', N'0', N'0'), (N'105', NULL, N'1290849628051124224', N'0', N'0', N'0', N'0', N'0'), (N'106', NULL, N'1290849798553776128', N'0', N'0', N'0', N'0', N'0'), (N'108', NULL, N'1291259822512693248', N'0', N'0', N'0', N'0', N'0'), (N'109', NULL, N'1292620505149145088', N'0', N'0', N'0', N'0', N'0'), (N'110', NULL, N'1292620665505775616', N'0', N'0', N'0', N'0', N'0'), (N'111', NULL, N'1292620843398791168', N'100', N'0', N'0', N'0', N'0'), (N'112', NULL, N'1292621027574874112', N'0', N'0', N'0', N'0', N'0'), (N'113', NULL, N'1292621363161137152', N'0', N'0', N'0', N'0', N'0'), (N'114', NULL, N'1292621494837116928', N'0', N'0', N'0', N'0', N'0'), (N'115', NULL, N'1292621629260365824', N'0', N'0', N'0', N'0', N'0'), (N'116', NULL, N'1292622526073864192', N'0', N'0', N'0', N'0', N'0'), (N'117', NULL, N'1293470838745821184', N'0', N'0', N'0', N'0', N'0'), (N'118', NULL, N'1293471661785706496', N'0', N'0', N'0', N'0', N'0'), (N'119', NULL, N'1293472678392721408', N'0', N'0', N'0', N'0', N'0'), (N'120', NULL, N'1293472857510473728', N'0', N'0', N'0', N'0', N'0'), (N'121', NULL, N'1299273336009359360', N'0', N'0', N'0', N'0', N'0'), (N'122', NULL, N'1299273436282585088', N'0', N'0', N'0', N'0', N'0'), (N'123', NULL, N'1299273618470567936', N'0', N'0', N'0', N'0', N'0'), (N'124', NULL, N'1299273770182737920', N'0', N'0', N'0', N'0', N'0'), (N'125', NULL, N'1299273978023084032', N'0', N'0', N'0', N'0', N'0'), (N'126', NULL, N'1299274123225694208', N'0', N'0', N'0', N'0', N'0'), (N'127', NULL, N'1299274222299348992', N'0', N'0', N'0', N'0', N'0'), (N'128', NULL, N'1304238876758495232', N'0', N'0', N'0', N'0', N'0'), (N'129', NULL, N'1304678610343383040', N'0', N'0', N'0', N'0', N'0'), (N'130', NULL, N'1304679169305694208', N'0', N'0', N'0', N'0', N'0'), (N'131', NULL, N'1310460417141817344', N'0', N'0', N'0', N'0', N'0'), (N'132', NULL, N'1310502391475519488', N'0', N'0', N'0', N'0', N'0'), (N'133', NULL, N'1310515546943569920', N'0', N'0', N'0', N'0', N'0'), (N'134', NULL, N'1310515735292985344', N'0', N'0', N'0', N'0', N'0'), (N'135', NULL, N'1316628769783480320', N'0', N'0', N'0', N'0', N'0'), (N'136', NULL, N'1316628940663619584', N'0', N'0', N'0', N'0', N'0'), (N'137', NULL, N'1316629112428756992', N'0', N'0', N'0', N'0', N'0'), (N'138', NULL, N'1316652047017246720', N'0', N'0', N'0', N'0', N'0'), (N'139', NULL, N'1316913899996737536', N'0', N'0', N'0', N'0', N'0'), (N'140', NULL, N'1319200951383199744', N'0', N'0', N'0', N'0', N'0'), (N'141', NULL, N'1319221929807024128', N'0', N'0', N'0', N'0', N'0'), (N'142', NULL, N'1319554431134306304', N'0', N'0', N'0', N'0', N'0'), (N'143', NULL, N'1319554550458060800', N'0', N'0', N'0', N'0', N'0'), (N'144', NULL, N'1319554948434595840', N'0', N'0', N'0', N'0', N'0'), (N'145', NULL, N'1319555067183730688', N'0', N'0', N'0', N'0', N'0'), (N'146', NULL, N'1319555230765780992', N'0', N'0', N'0', N'0', N'0'), (N'147', NULL, N'1319555333790470144', N'0', N'0', N'0', N'0', N'0'), (N'148', NULL, N'1321001932510203904', N'0', N'0', N'0', N'0', N'0'), (N'149', NULL, N'1321002059803136000', N'0', N'0', N'0', N'0', N'0'), (N'150', NULL, N'1321002256440496128', N'0', N'0', N'0', N'0', N'0'), (N'151', NULL, N'1321002350686507008', N'0', N'0', N'0', N'0', N'0'), (N'152', NULL, N'1322190027988525056', N'0', N'0', N'0', N'0', N'0')
+INSERT INTO [apigateway].[appapigatewayhttpoptions] VALUES (N'1', N'1260841964962947072', NULL, NULL, N'0', N'0', N'1', N'0'), (N'4', NULL, N'1261299170387169280', N'1000', N'1', N'0', N'1', N'0'), (N'5', NULL, N'1261585859064872960', NULL, N'0', N'0', N'1', N'0'), (N'6', NULL, N'1261586605810368512', NULL, N'0', N'0', N'0', N'0'), (N'7', NULL, N'1261587558609436672', NULL, N'0', N'0', N'0', N'0'), (N'8', NULL, N'1261588213298348032', NULL, N'0', N'0', N'0', N'0'), (N'9', NULL, N'1261588367619375104', NULL, N'0', N'0', N'0', N'0'), (N'10', NULL, N'1261588628450557952', NULL, N'0', N'0', N'0', N'0'), (N'11', NULL, N'1261588881564221440', NULL, N'0', N'0', N'0', N'0'), (N'12', NULL, N'1261588983053795328', NULL, N'0', N'0', N'0', N'0'), (N'13', NULL, N'1261589139039961088', NULL, N'0', N'0', N'0', N'0'), (N'14', NULL, N'1261589197483393024', NULL, N'0', N'0', N'0', N'0'), (N'15', NULL, N'1261589278857084928', NULL, N'0', N'0', N'0', N'0'), (N'16', NULL, N'1261589420356124672', NULL, N'0', N'0', N'0', N'0'), (N'17', NULL, N'1261589960393736192', N'1000', N'1', N'0', N'1', N'0'), (N'18', NULL, N'1261606600242085888', NULL, N'0', N'0', N'0', N'0'), (N'19', NULL, N'1261606689601732608', NULL, N'0', N'0', N'0', N'0'), (N'22', NULL, N'1262220447629058048', NULL, N'0', N'0', N'1', N'0'), (N'23', NULL, N'1262230734939758592', NULL, N'0', N'0', N'1', N'0'), (N'24', NULL, N'1262296916350869504', NULL, N'0', N'0', N'1', N'0'), (N'25', NULL, N'1262632376348594176', N'0', N'0', N'0', N'0', N'0'), (N'26', NULL, N'1262632791869902848', N'0', N'0', N'0', N'0', N'0'), (N'29', NULL, N'1262660336921235456', N'0', N'0', N'0', N'0', N'0'), (N'30', NULL, N'1262660528277966848', N'0', N'0', N'0', N'0', N'0'), (N'31', NULL, N'1262660706875625472', N'0', N'0', N'0', N'0', N'0'), (N'32', NULL, N'1262660966393991168', N'0', N'0', N'0', N'0', N'0'), (N'33', NULL, N'1262661109474283520', N'0', N'0', N'0', N'0', N'0'), (N'34', NULL, N'1262663888804663296', N'0', N'0', N'0', N'0', N'0'), (N'35', NULL, N'1262664024096133120', N'0', N'0', N'0', N'0', N'0'), (N'36', NULL, N'1262664186252120064', N'0', N'0', N'0', N'0', N'0'), (N'37', NULL, N'1262664357044178944', N'0', N'0', N'0', N'0', N'0'), (N'38', NULL, N'1262664632928718848', N'0', N'0', N'0', N'0', N'0'), (N'39', NULL, N'1262664751409418240', N'0', N'0', N'0', N'0', N'0'), (N'40', NULL, N'1262664871274237952', N'0', N'0', N'0', N'0', N'0'), (N'41', NULL, N'1262665026111164416', N'0', N'0', N'0', N'0', N'0'), (N'42', NULL, N'1262665159905267712', N'0', N'0', N'0', N'0', N'0'), (N'43', NULL, N'1262665329829105664', N'0', N'0', N'0', N'0', N'0'), (N'44', NULL, N'1262665456471920640', N'0', N'0', N'0', N'0', N'0'), (N'45', NULL, N'1262665628165754880', N'0', N'0', N'0', N'0', N'0'), (N'46', NULL, N'1262666172682883072', N'0', N'0', N'0', N'0', N'0'), (N'48', NULL, N'1262723402331885568', N'0', N'0', N'0', N'0', N'0'), (N'49', NULL, N'1262935771746734080', N'0', N'0', N'0', N'0', N'0'), (N'50', NULL, N'1262935906522304512', N'0', N'0', N'0', N'0', N'0'), (N'53', NULL, N'1263074419073593344', N'0', N'0', N'0', N'0', N'0'), (N'54', NULL, N'1263075249394790400', N'0', N'0', N'0', N'0', N'0'), (N'55', NULL, N'1263075593499684864', N'0', N'0', N'0', N'0', N'0'), (N'57', NULL, N'1263101898440146944', N'0', N'0', N'0', N'0', N'0'), (N'58', NULL, N'1263303878648569856', N'0', N'0', N'0', N'0', N'0'), (N'59', NULL, N'1263304204797648896', N'0', N'0', N'0', N'0', N'0'), (N'60', NULL, N'1263304872891555840', N'0', N'0', N'0', N'0', N'0'), (N'61', NULL, N'1263305106250047488', N'0', N'0', N'0', N'0', N'0'), (N'62', NULL, N'1263305244594970624', N'0', N'0', N'0', N'0', N'0'), (N'63', NULL, N'1263305430536855552', N'0', N'0', N'0', N'0', N'0'), (N'64', NULL, N'1263639172959174656', N'0', N'0', N'0', N'0', N'0'), (N'65', NULL, N'1264799968944640000', N'0', N'0', N'0', N'0', N'0'), (N'66', NULL, N'1264800070161584128', N'0', N'0', N'0', N'0', N'0'), (N'68', NULL, N'1267360794414161920', N'0', N'0', N'0', N'0', N'0'), (N'69', NULL, N'1267383367629807616', N'0', N'0', N'0', N'0', N'0'), (N'70', NULL, N'1267817055527632896', N'0', N'0', N'0', N'0', N'0'), (N'71', NULL, N'1267817221286526976', N'0', N'0', N'0', N'0', N'0'), (N'72', NULL, N'1268893687085518848', N'0', N'0', N'0', N'0', N'0'), (N'97', NULL, N'1288657613998579712', N'1000', N'0', N'0', N'0', N'0'), (N'98', NULL, N'1288657941770854400', N'1000', N'0', N'0', N'0', N'0'), (N'99', NULL, N'1288658134067109888', N'1000', N'0', N'0', N'0', N'0'), (N'100', NULL, N'1288658305156964352', N'1000', N'0', N'0', N'0', N'0'), (N'101', NULL, N'1288658491216289792', N'1000', N'0', N'0', N'0', N'0'), (N'102', NULL, N'1288658638302142464', N'1000', N'0', N'0', N'0', N'0'), (N'103', NULL, N'1288658791784308736', N'1000', N'0', N'0', N'0', N'0'), (N'104', NULL, N'1290849478956199936', N'0', N'0', N'0', N'0', N'0'), (N'105', NULL, N'1290849628051124224', N'0', N'0', N'0', N'0', N'0'), (N'106', NULL, N'1290849798553776128', N'0', N'0', N'0', N'0', N'0'), (N'108', NULL, N'1291259822512693248', N'0', N'0', N'0', N'0', N'0'), (N'109', NULL, N'1292620505149145088', N'0', N'0', N'0', N'0', N'0'), (N'110', NULL, N'1292620665505775616', N'0', N'0', N'0', N'0', N'0'), (N'111', NULL, N'1292620843398791168', N'100', N'0', N'0', N'0', N'0'), (N'112', NULL, N'1292621027574874112', N'0', N'0', N'0', N'0', N'0'), (N'113', NULL, N'1292621363161137152', N'0', N'0', N'0', N'0', N'0'), (N'114', NULL, N'1292621494837116928', N'0', N'0', N'0', N'0', N'0'), (N'115', NULL, N'1292621629260365824', N'0', N'0', N'0', N'0', N'0'), (N'116', NULL, N'1292622526073864192', N'0', N'0', N'0', N'0', N'0'), (N'117', NULL, N'1293470838745821184', N'0', N'0', N'0', N'0', N'0'), (N'118', NULL, N'1293471661785706496', N'0', N'0', N'0', N'0', N'0'), (N'119', NULL, N'1293472678392721408', N'0', N'0', N'0', N'0', N'0'), (N'120', NULL, N'1293472857510473728', N'0', N'0', N'0', N'0', N'0'), (N'121', NULL, N'1299273336009359360', N'0', N'0', N'0', N'0', N'0'), (N'122', NULL, N'1299273436282585088', N'0', N'0', N'0', N'0', N'0'), (N'123', NULL, N'1299273618470567936', N'0', N'0', N'0', N'0', N'0'), (N'124', NULL, N'1299273770182737920', N'0', N'0', N'0', N'0', N'0'), (N'125', NULL, N'1299273978023084032', N'0', N'0', N'0', N'0', N'0'), (N'126', NULL, N'1299274123225694208', N'0', N'0', N'0', N'0', N'0'), (N'127', NULL, N'1299274222299348992', N'0', N'0', N'0', N'0', N'0'), (N'128', NULL, N'1304238876758495232', N'0', N'0', N'0', N'0', N'0'), (N'129', NULL, N'1304678610343383040', N'0', N'0', N'0', N'0', N'0'), (N'130', NULL, N'1304679169305694208', N'0', N'0', N'0', N'0', N'0'), (N'131', NULL, N'1310460417141817344', N'0', N'0', N'0', N'0', N'0'), (N'132', NULL, N'1310502391475519488', N'0', N'0', N'0', N'0', N'0'), (N'133', NULL, N'1310515546943569920', N'0', N'0', N'0', N'0', N'0'), (N'134', NULL, N'1310515735292985344', N'0', N'0', N'0', N'0', N'0'), (N'135', NULL, N'1316628769783480320', N'0', N'0', N'0', N'0', N'0'), (N'136', NULL, N'1316628940663619584', N'0', N'0', N'0', N'0', N'0'), (N'137', NULL, N'1316629112428756992', N'0', N'0', N'0', N'0', N'0'), (N'138', NULL, N'1316652047017246720', N'0', N'0', N'0', N'0', N'0'), (N'139', NULL, N'1316913899996737536', N'0', N'0', N'0', N'0', N'0'), (N'140', NULL, N'1319200951383199744', N'0', N'0', N'0', N'0', N'0'), (N'141', NULL, N'1319221929807024128', N'0', N'0', N'0', N'0', N'0'), (N'142', NULL, N'1319554431134306304', N'0', N'0', N'0', N'0', N'0'), (N'143', NULL, N'1319554550458060800', N'0', N'0', N'0', N'0', N'0'), (N'144', NULL, N'1319554948434595840', N'0', N'0', N'0', N'0', N'0'), (N'145', NULL, N'1319555067183730688', N'0', N'0', N'0', N'0', N'0'), (N'146', NULL, N'1319555230765780992', N'0', N'0', N'0', N'0', N'0'), (N'147', NULL, N'1319555333790470144', N'0', N'0', N'0', N'0', N'0'), (N'148', NULL, N'1321001932510203904', N'0', N'0', N'0', N'0', N'0'), (N'149', NULL, N'1321002059803136000', N'0', N'0', N'0', N'0', N'0'), (N'150', NULL, N'1321002256440496128', N'0', N'0', N'0', N'0', N'0'), (N'151', NULL, N'1321002350686507008', N'0', N'0', N'0', N'0', N'0'), (N'152', NULL, N'1322190027988525056', N'0', N'0', N'0', N'0', N'0'), (N'153', NULL, N'1322452079688458240', N'0', N'0', N'0', N'0', N'0'), (N'154', NULL, N'1322452183929495552', N'0', N'0', N'0', N'0', N'0'), (N'155', NULL, N'1322452308651319296', N'0', N'0', N'0', N'0', N'0'), (N'156', NULL, N'1322452858176446464', N'0', N'0', N'0', N'0', N'0'), (N'157', NULL, N'1322452989235863552', N'0', N'0', N'0', N'0', N'0'), (N'158', NULL, N'1322453089655889920', N'0', N'0', N'0', N'0', N'0'), (N'159', NULL, N'1329706860249804800', N'0', N'0', N'0', N'0', N'0'), (N'160', NULL, N'1329707002411544576', N'0', N'0', N'0', N'0', N'0'), (N'161', NULL, N'1329708512277098496', N'0', N'0', N'0', N'0', N'0'), (N'162', NULL, N'1329708625917571072', N'0', N'0', N'0', N'0', N'0')
GO
COMMIT
@@ -366,7 +366,7 @@ GO
BEGIN TRANSACTION
GO
-INSERT INTO [apigateway].[appapigatewayqosoptions] VALUES (N'1', N'1260841964962947072', NULL, N'60', N'60000', N'30000'), (N'4', NULL, N'1261299170387169280', N'60', N'60000', N'30000'), (N'5', NULL, N'1261585859064872960', N'60', N'60000', N'30000'), (N'6', NULL, N'1261586605810368512', N'60', N'60000', N'30000'), (N'7', NULL, N'1261587558609436672', N'60', N'60000', N'30000'), (N'8', NULL, N'1261588213298348032', N'60', N'60000', N'30000'), (N'9', NULL, N'1261588367619375104', N'60', N'60000', N'30000'), (N'10', NULL, N'1261588628450557952', N'60', N'60000', N'30000'), (N'11', NULL, N'1261588881564221440', N'60', N'60000', N'30000'), (N'12', NULL, N'1261588983053795328', N'60', N'60000', N'30000'), (N'13', NULL, N'1261589139039961088', N'60', N'60000', N'30000'), (N'14', NULL, N'1261589197483393024', N'60', N'60000', N'30000'), (N'15', NULL, N'1261589278857084928', N'60', N'60000', N'30000'), (N'16', NULL, N'1261589420356124672', N'60', N'60000', N'30000'), (N'17', NULL, N'1261589960393736192', N'60', N'60000', N'30000'), (N'18', NULL, N'1261606600242085888', NULL, NULL, NULL), (N'19', NULL, N'1261606689601732608', NULL, NULL, NULL), (N'22', NULL, N'1262220447629058048', N'60', N'60000', N'30000'), (N'23', NULL, N'1262230734939758592', N'60', N'60000', N'30000'), (N'24', NULL, N'1262296916350869504', N'60', N'60000', N'30000'), (N'25', NULL, N'1262632376348594176', N'50', N'60000', N'30000'), (N'26', NULL, N'1262632791869902848', N'50', N'60000', N'30000'), (N'29', NULL, N'1262660336921235456', N'50', N'60000', N'30000'), (N'30', NULL, N'1262660528277966848', N'50', N'60000', N'30000'), (N'31', NULL, N'1262660706875625472', N'50', N'60000', N'30000'), (N'32', NULL, N'1262660966393991168', N'50', N'60000', N'30000'), (N'33', NULL, N'1262661109474283520', N'50', N'60000', N'30000'), (N'34', NULL, N'1262663888804663296', N'50', N'60000', N'30000'), (N'35', NULL, N'1262664024096133120', N'50', N'60000', N'30000'), (N'36', NULL, N'1262664186252120064', N'50', N'60000', N'30000'), (N'37', NULL, N'1262664357044178944', N'50', N'60000', N'30000'), (N'38', NULL, N'1262664632928718848', N'50', N'60000', N'30000'), (N'39', NULL, N'1262664751409418240', N'50', N'60000', N'30000'), (N'40', NULL, N'1262664871274237952', N'50', N'60000', N'30000'), (N'41', NULL, N'1262665026111164416', N'50', N'60000', N'30000'), (N'42', NULL, N'1262665159905267712', N'50', N'60000', N'30000'), (N'43', NULL, N'1262665329829105664', N'50', N'60000', N'30000'), (N'44', NULL, N'1262665456471920640', N'50', N'60000', N'30000'), (N'45', NULL, N'1262665628165754880', N'50', N'60000', N'30000'), (N'46', NULL, N'1262666172682883072', N'50', N'60000', N'30000'), (N'48', NULL, N'1262723402331885568', N'50', N'60000', N'30000'), (N'49', NULL, N'1262935771746734080', N'50', N'60000', N'30000'), (N'50', NULL, N'1262935906522304512', N'50', N'60000', N'30000'), (N'53', NULL, N'1263074419073593344', N'50', N'60000', N'30000'), (N'54', NULL, N'1263075249394790400', N'50', N'60000', N'30000'), (N'55', NULL, N'1263075593499684864', N'50', N'60000', N'30000'), (N'57', NULL, N'1263101898440146944', N'50', N'60000', N'120000'), (N'58', NULL, N'1263303878648569856', N'50', N'60000', N'30000'), (N'59', NULL, N'1263304204797648896', N'50', N'60000', N'120000'), (N'60', NULL, N'1263304872891555840', N'50', N'60000', N'30000'), (N'61', NULL, N'1263305106250047488', N'50', N'60000', N'30000'), (N'62', NULL, N'1263305244594970624', N'50', N'60000', N'30000'), (N'63', NULL, N'1263305430536855552', N'50', N'60000', N'30000'), (N'64', NULL, N'1263639172959174656', N'50', N'60000', N'30000'), (N'65', NULL, N'1264799968944640000', N'50', N'60000', N'30000'), (N'66', NULL, N'1264800070161584128', N'50', N'60000', N'30000'), (N'68', NULL, N'1267360794414161920', N'50', N'60000', N'30000'), (N'69', NULL, N'1267383367629807616', N'50', N'60000', N'30000'), (N'70', NULL, N'1267817055527632896', N'50', N'60000', N'30000'), (N'71', NULL, N'1267817221286526976', N'50', N'60000', N'30000'), (N'72', NULL, N'1268893687085518848', N'50', N'60000', N'30000'), (N'97', NULL, N'1288657613998579712', N'50', N'60000', N'30000'), (N'98', NULL, N'1288657941770854400', N'50', N'60000', N'30000'), (N'99', NULL, N'1288658134067109888', N'50', N'60000', N'30000'), (N'100', NULL, N'1288658305156964352', N'50', N'60000', N'30000'), (N'101', NULL, N'1288658491216289792', N'50', N'60000', N'30000'), (N'102', NULL, N'1288658638302142464', N'50', N'60000', N'30000'), (N'103', NULL, N'1288658791784308736', N'50', N'60000', N'30000'), (N'104', NULL, N'1290849478956199936', N'50', N'60000', N'30000'), (N'105', NULL, N'1290849628051124224', N'50', N'60000', N'30000'), (N'106', NULL, N'1290849798553776128', N'50', N'60000', N'30000'), (N'108', NULL, N'1291259822512693248', N'50', N'60000', N'30000'), (N'109', NULL, N'1292620505149145088', N'50', N'60000', N'30000'), (N'110', NULL, N'1292620665505775616', N'50', N'60000', N'30000'), (N'111', NULL, N'1292620843398791168', N'50', N'60000', N'1200000'), (N'112', NULL, N'1292621027574874112', N'50', N'60000', N'30000'), (N'113', NULL, N'1292621363161137152', N'50', N'60000', N'30000'), (N'114', NULL, N'1292621494837116928', N'50', N'60000', N'30000'), (N'115', NULL, N'1292621629260365824', N'50', N'60000', N'30000'), (N'116', NULL, N'1292622526073864192', N'50', N'60000', N'30000'), (N'117', NULL, N'1293470838745821184', N'50', N'60000', N'30000'), (N'118', NULL, N'1293471661785706496', N'50', N'60000', N'30000'), (N'119', NULL, N'1293472678392721408', N'50', N'60000', N'30000'), (N'120', NULL, N'1293472857510473728', N'50', N'60000', N'30000'), (N'121', NULL, N'1299273336009359360', N'50', N'60000', N'30000'), (N'122', NULL, N'1299273436282585088', N'50', N'60000', N'30000'), (N'123', NULL, N'1299273618470567936', N'50', N'60000', N'30000'), (N'124', NULL, N'1299273770182737920', N'50', N'60000', N'30000'), (N'125', NULL, N'1299273978023084032', N'50', N'60000', N'30000'), (N'126', NULL, N'1299274123225694208', N'50', N'60000', N'30000'), (N'127', NULL, N'1299274222299348992', N'50', N'60000', N'30000'), (N'128', NULL, N'1304238876758495232', N'50', N'60000', N'30000'), (N'129', NULL, N'1304678610343383040', N'50', N'60000', N'30000'), (N'130', NULL, N'1304679169305694208', N'50', N'60000', N'30000'), (N'131', NULL, N'1310460417141817344', N'50', N'60000', N'30000'), (N'132', NULL, N'1310502391475519488', N'50', N'60000', N'30000'), (N'133', NULL, N'1310515546943569920', N'50', N'60000', N'30000'), (N'134', NULL, N'1310515735292985344', N'50', N'60000', N'30000'), (N'135', NULL, N'1316628769783480320', N'50', N'60000', N'30000'), (N'136', NULL, N'1316628940663619584', N'50', N'60000', N'30000'), (N'137', NULL, N'1316629112428756992', N'50', N'60000', N'30000'), (N'138', NULL, N'1316652047017246720', N'50', N'60000', N'30000'), (N'139', NULL, N'1316913899996737536', N'50', N'60000', N'30000'), (N'140', NULL, N'1319200951383199744', N'50', N'60000', N'30000'), (N'141', NULL, N'1319221929807024128', N'50', N'60000', N'30000'), (N'142', NULL, N'1319554431134306304', N'50', N'60000', N'30000'), (N'143', NULL, N'1319554550458060800', N'50', N'60000', N'30000'), (N'144', NULL, N'1319554948434595840', N'50', N'60000', N'30000'), (N'145', NULL, N'1319555067183730688', N'50', N'60000', N'30000'), (N'146', NULL, N'1319555230765780992', N'50', N'60000', N'30000'), (N'147', NULL, N'1319555333790470144', N'50', N'60000', N'30000'), (N'148', NULL, N'1321001932510203904', N'50', N'60000', N'30000'), (N'149', NULL, N'1321002059803136000', N'50', N'60000', N'30000'), (N'150', NULL, N'1321002256440496128', N'50', N'60000', N'30000'), (N'151', NULL, N'1321002350686507008', N'50', N'60000', N'30000'), (N'152', NULL, N'1322190027988525056', N'50', N'60000', N'30000')
+INSERT INTO [apigateway].[appapigatewayqosoptions] VALUES (N'1', N'1260841964962947072', NULL, N'60', N'60000', N'30000'), (N'4', NULL, N'1261299170387169280', N'60', N'60000', N'30000'), (N'5', NULL, N'1261585859064872960', N'60', N'60000', N'30000'), (N'6', NULL, N'1261586605810368512', N'60', N'60000', N'30000'), (N'7', NULL, N'1261587558609436672', N'60', N'60000', N'30000'), (N'8', NULL, N'1261588213298348032', N'60', N'60000', N'30000'), (N'9', NULL, N'1261588367619375104', N'60', N'60000', N'30000'), (N'10', NULL, N'1261588628450557952', N'60', N'60000', N'30000'), (N'11', NULL, N'1261588881564221440', N'60', N'60000', N'30000'), (N'12', NULL, N'1261588983053795328', N'60', N'60000', N'30000'), (N'13', NULL, N'1261589139039961088', N'60', N'60000', N'30000'), (N'14', NULL, N'1261589197483393024', N'60', N'60000', N'30000'), (N'15', NULL, N'1261589278857084928', N'60', N'60000', N'30000'), (N'16', NULL, N'1261589420356124672', N'60', N'60000', N'30000'), (N'17', NULL, N'1261589960393736192', N'60', N'60000', N'30000'), (N'18', NULL, N'1261606600242085888', NULL, NULL, NULL), (N'19', NULL, N'1261606689601732608', NULL, NULL, NULL), (N'22', NULL, N'1262220447629058048', N'60', N'60000', N'30000'), (N'23', NULL, N'1262230734939758592', N'60', N'60000', N'30000'), (N'24', NULL, N'1262296916350869504', N'60', N'60000', N'30000'), (N'25', NULL, N'1262632376348594176', N'50', N'60000', N'30000'), (N'26', NULL, N'1262632791869902848', N'50', N'60000', N'30000'), (N'29', NULL, N'1262660336921235456', N'50', N'60000', N'30000'), (N'30', NULL, N'1262660528277966848', N'50', N'60000', N'30000'), (N'31', NULL, N'1262660706875625472', N'50', N'60000', N'30000'), (N'32', NULL, N'1262660966393991168', N'50', N'60000', N'30000'), (N'33', NULL, N'1262661109474283520', N'50', N'60000', N'30000'), (N'34', NULL, N'1262663888804663296', N'50', N'60000', N'30000'), (N'35', NULL, N'1262664024096133120', N'50', N'60000', N'30000'), (N'36', NULL, N'1262664186252120064', N'50', N'60000', N'30000'), (N'37', NULL, N'1262664357044178944', N'50', N'60000', N'30000'), (N'38', NULL, N'1262664632928718848', N'50', N'60000', N'30000'), (N'39', NULL, N'1262664751409418240', N'50', N'60000', N'30000'), (N'40', NULL, N'1262664871274237952', N'50', N'60000', N'30000'), (N'41', NULL, N'1262665026111164416', N'50', N'60000', N'30000'), (N'42', NULL, N'1262665159905267712', N'50', N'60000', N'30000'), (N'43', NULL, N'1262665329829105664', N'50', N'60000', N'30000'), (N'44', NULL, N'1262665456471920640', N'50', N'60000', N'30000'), (N'45', NULL, N'1262665628165754880', N'50', N'60000', N'30000'), (N'46', NULL, N'1262666172682883072', N'50', N'60000', N'30000'), (N'48', NULL, N'1262723402331885568', N'50', N'60000', N'30000'), (N'49', NULL, N'1262935771746734080', N'50', N'60000', N'30000'), (N'50', NULL, N'1262935906522304512', N'50', N'60000', N'30000'), (N'53', NULL, N'1263074419073593344', N'50', N'60000', N'30000'), (N'54', NULL, N'1263075249394790400', N'50', N'60000', N'30000'), (N'55', NULL, N'1263075593499684864', N'50', N'60000', N'30000'), (N'57', NULL, N'1263101898440146944', N'50', N'60000', N'120000'), (N'58', NULL, N'1263303878648569856', N'50', N'60000', N'30000'), (N'59', NULL, N'1263304204797648896', N'50', N'60000', N'120000'), (N'60', NULL, N'1263304872891555840', N'50', N'60000', N'30000'), (N'61', NULL, N'1263305106250047488', N'50', N'60000', N'30000'), (N'62', NULL, N'1263305244594970624', N'50', N'60000', N'30000'), (N'63', NULL, N'1263305430536855552', N'50', N'60000', N'30000'), (N'64', NULL, N'1263639172959174656', N'50', N'60000', N'30000'), (N'65', NULL, N'1264799968944640000', N'50', N'60000', N'30000'), (N'66', NULL, N'1264800070161584128', N'50', N'60000', N'30000'), (N'68', NULL, N'1267360794414161920', N'50', N'60000', N'30000'), (N'69', NULL, N'1267383367629807616', N'50', N'60000', N'30000'), (N'70', NULL, N'1267817055527632896', N'50', N'60000', N'30000'), (N'71', NULL, N'1267817221286526976', N'50', N'60000', N'30000'), (N'72', NULL, N'1268893687085518848', N'50', N'60000', N'30000'), (N'97', NULL, N'1288657613998579712', N'50', N'60000', N'30000'), (N'98', NULL, N'1288657941770854400', N'50', N'60000', N'30000'), (N'99', NULL, N'1288658134067109888', N'50', N'60000', N'30000'), (N'100', NULL, N'1288658305156964352', N'50', N'60000', N'30000'), (N'101', NULL, N'1288658491216289792', N'50', N'60000', N'30000'), (N'102', NULL, N'1288658638302142464', N'50', N'60000', N'30000'), (N'103', NULL, N'1288658791784308736', N'50', N'60000', N'30000'), (N'104', NULL, N'1290849478956199936', N'50', N'60000', N'30000'), (N'105', NULL, N'1290849628051124224', N'50', N'60000', N'30000'), (N'106', NULL, N'1290849798553776128', N'50', N'60000', N'30000'), (N'108', NULL, N'1291259822512693248', N'50', N'60000', N'30000'), (N'109', NULL, N'1292620505149145088', N'50', N'60000', N'30000'), (N'110', NULL, N'1292620665505775616', N'50', N'60000', N'30000'), (N'111', NULL, N'1292620843398791168', N'50', N'60000', N'1200000'), (N'112', NULL, N'1292621027574874112', N'50', N'60000', N'30000'), (N'113', NULL, N'1292621363161137152', N'50', N'60000', N'30000'), (N'114', NULL, N'1292621494837116928', N'50', N'60000', N'30000'), (N'115', NULL, N'1292621629260365824', N'50', N'60000', N'30000'), (N'116', NULL, N'1292622526073864192', N'50', N'60000', N'30000'), (N'117', NULL, N'1293470838745821184', N'50', N'60000', N'30000'), (N'118', NULL, N'1293471661785706496', N'50', N'60000', N'30000'), (N'119', NULL, N'1293472678392721408', N'50', N'60000', N'30000'), (N'120', NULL, N'1293472857510473728', N'50', N'60000', N'30000'), (N'121', NULL, N'1299273336009359360', N'50', N'60000', N'30000'), (N'122', NULL, N'1299273436282585088', N'50', N'60000', N'30000'), (N'123', NULL, N'1299273618470567936', N'50', N'60000', N'30000'), (N'124', NULL, N'1299273770182737920', N'50', N'60000', N'30000'), (N'125', NULL, N'1299273978023084032', N'50', N'60000', N'30000'), (N'126', NULL, N'1299274123225694208', N'50', N'60000', N'30000'), (N'127', NULL, N'1299274222299348992', N'50', N'60000', N'30000'), (N'128', NULL, N'1304238876758495232', N'50', N'60000', N'30000'), (N'129', NULL, N'1304678610343383040', N'50', N'60000', N'30000'), (N'130', NULL, N'1304679169305694208', N'50', N'60000', N'30000'), (N'131', NULL, N'1310460417141817344', N'50', N'60000', N'30000'), (N'132', NULL, N'1310502391475519488', N'50', N'60000', N'30000'), (N'133', NULL, N'1310515546943569920', N'50', N'60000', N'30000'), (N'134', NULL, N'1310515735292985344', N'50', N'60000', N'30000'), (N'135', NULL, N'1316628769783480320', N'50', N'60000', N'30000'), (N'136', NULL, N'1316628940663619584', N'50', N'60000', N'30000'), (N'137', NULL, N'1316629112428756992', N'50', N'60000', N'30000'), (N'138', NULL, N'1316652047017246720', N'50', N'60000', N'30000'), (N'139', NULL, N'1316913899996737536', N'50', N'60000', N'30000'), (N'140', NULL, N'1319200951383199744', N'50', N'60000', N'30000'), (N'141', NULL, N'1319221929807024128', N'50', N'60000', N'30000'), (N'142', NULL, N'1319554431134306304', N'50', N'60000', N'30000'), (N'143', NULL, N'1319554550458060800', N'50', N'60000', N'30000'), (N'144', NULL, N'1319554948434595840', N'50', N'60000', N'30000'), (N'145', NULL, N'1319555067183730688', N'50', N'60000', N'30000'), (N'146', NULL, N'1319555230765780992', N'50', N'60000', N'30000'), (N'147', NULL, N'1319555333790470144', N'50', N'60000', N'30000'), (N'148', NULL, N'1321001932510203904', N'50', N'60000', N'30000'), (N'149', NULL, N'1321002059803136000', N'50', N'60000', N'30000'), (N'150', NULL, N'1321002256440496128', N'50', N'60000', N'30000'), (N'151', NULL, N'1321002350686507008', N'50', N'60000', N'30000'), (N'152', NULL, N'1322190027988525056', N'50', N'60000', N'30000'), (N'153', NULL, N'1322452079688458240', N'50', N'60000', N'30000'), (N'154', NULL, N'1322452183929495552', N'50', N'60000', N'30000'), (N'155', NULL, N'1322452308651319296', N'50', N'60000', N'30000'), (N'156', NULL, N'1322452858176446464', N'50', N'60000', N'30000'), (N'157', NULL, N'1322452989235863552', N'50', N'60000', N'30000'), (N'158', NULL, N'1322453089655889920', N'50', N'60000', N'30000'), (N'159', NULL, N'1329706860249804800', N'50', N'60000', N'30000'), (N'160', NULL, N'1329707002411544576', N'50', N'60000', N'30000'), (N'161', NULL, N'1329708512277098496', N'50', N'60000', N'30000'), (N'162', NULL, N'1329708625917571072', N'50', N'60000', N'30000')
GO
COMMIT
@@ -431,7 +431,7 @@ GO
BEGIN TRANSACTION
GO
-INSERT INTO [apigateway].[appapigatewayratelimitrule] VALUES (N'3', N'1261299170387169280', NULL, N'', N'0', NULL, NULL, NULL), (N'4', N'1261585859064872960', NULL, N'', N'0', NULL, NULL, NULL), (N'5', N'1261586605810368512', NULL, N'', N'0', NULL, NULL, NULL), (N'6', N'1261587558609436672', NULL, N'', N'0', NULL, NULL, NULL), (N'7', N'1261588213298348032', NULL, N'', N'0', NULL, NULL, NULL), (N'8', N'1261588367619375104', NULL, N'', N'0', NULL, NULL, NULL), (N'9', N'1261588628450557952', NULL, N'', N'0', NULL, NULL, NULL), (N'10', N'1261588881564221440', NULL, N'', N'0', NULL, NULL, NULL), (N'11', N'1261588983053795328', NULL, N'', N'0', NULL, NULL, NULL), (N'12', N'1261589139039961088', NULL, N'', N'0', NULL, NULL, NULL), (N'13', N'1261589197483393024', NULL, N'', N'0', NULL, NULL, NULL), (N'14', N'1261589278857084928', NULL, N'', N'0', NULL, NULL, NULL), (N'15', N'1261589420356124672', NULL, N'', N'0', NULL, NULL, NULL), (N'16', N'1261589960393736192', NULL, N'', N'0', NULL, NULL, NULL), (N'17', N'1261606600242085888', NULL, N'', N'0', NULL, NULL, NULL), (N'18', N'1261606689601732608', NULL, N'', N'0', NULL, NULL, NULL), (N'21', N'1262220447629058048', NULL, N'', N'0', NULL, NULL, NULL), (N'22', N'1262230734939758592', NULL, N'', N'0', NULL, NULL, NULL), (N'23', N'1262296916350869504', NULL, N'', N'0', NULL, NULL, NULL), (N'24', N'1262632376348594176', NULL, N'', N'0', NULL, NULL, NULL), (N'25', N'1262632791869902848', NULL, N'', N'0', NULL, NULL, NULL), (N'28', N'1262660336921235456', NULL, N'', N'0', NULL, NULL, NULL), (N'29', N'1262660528277966848', NULL, N'', N'0', NULL, NULL, NULL), (N'30', N'1262660706875625472', NULL, N'', N'0', NULL, NULL, NULL), (N'31', N'1262660966393991168', NULL, N'', N'0', NULL, NULL, NULL), (N'32', N'1262661109474283520', NULL, N'', N'0', NULL, NULL, NULL), (N'33', N'1262663888804663296', NULL, N'', N'0', NULL, NULL, NULL), (N'34', N'1262664024096133120', NULL, N'', N'0', NULL, NULL, NULL), (N'35', N'1262664186252120064', NULL, N'', N'0', NULL, NULL, NULL), (N'36', N'1262664357044178944', NULL, N'', N'0', NULL, NULL, NULL), (N'37', N'1262664632928718848', NULL, N'', N'0', NULL, NULL, NULL), (N'38', N'1262664751409418240', NULL, N'', N'0', NULL, NULL, NULL), (N'39', N'1262664871274237952', NULL, N'', N'0', NULL, NULL, NULL), (N'40', N'1262665026111164416', NULL, N'', N'0', NULL, NULL, NULL), (N'41', N'1262665159905267712', NULL, N'', N'0', NULL, NULL, NULL), (N'42', N'1262665329829105664', NULL, N'', N'0', NULL, NULL, NULL), (N'43', N'1262665456471920640', NULL, N'', N'0', NULL, NULL, NULL), (N'44', N'1262665628165754880', NULL, N'', N'0', NULL, NULL, NULL), (N'45', N'1262666172682883072', NULL, N'', N'0', NULL, NULL, NULL), (N'47', N'1262723402331885568', NULL, N'', N'0', NULL, NULL, NULL), (N'48', N'1262935771746734080', NULL, N'', N'0', NULL, NULL, NULL), (N'49', N'1262935906522304512', NULL, N'', N'0', NULL, NULL, NULL), (N'52', N'1263074419073593344', NULL, N'', N'0', NULL, NULL, NULL), (N'53', N'1263075249394790400', NULL, N'', N'0', NULL, NULL, NULL), (N'54', N'1263075593499684864', NULL, N'', N'0', NULL, NULL, NULL), (N'56', N'1263101898440146944', NULL, N'', N'0', NULL, NULL, NULL), (N'57', N'1263303878648569856', NULL, N'', N'0', NULL, NULL, NULL), (N'58', N'1263304204797648896', NULL, N'', N'0', NULL, NULL, NULL), (N'59', N'1263304872891555840', NULL, N'', N'0', NULL, NULL, NULL), (N'60', N'1263305106250047488', NULL, N'', N'0', NULL, NULL, NULL), (N'61', N'1263305244594970624', NULL, N'', N'0', NULL, NULL, NULL), (N'62', N'1263305430536855552', NULL, N'', N'0', NULL, NULL, NULL), (N'63', N'1263639172959174656', NULL, N'', N'0', NULL, NULL, NULL), (N'64', N'1264799968944640000', NULL, N'', N'0', NULL, NULL, NULL), (N'65', N'1264800070161584128', NULL, N'', N'0', NULL, NULL, NULL), (N'66', N'1267360794414161920', NULL, N'', N'0', NULL, NULL, NULL), (N'67', N'1267383367629807616', NULL, N'', N'0', NULL, NULL, NULL), (N'68', N'1267817055527632896', NULL, N'', N'0', NULL, NULL, NULL), (N'69', N'1267817221286526976', NULL, N'', N'0', NULL, NULL, NULL), (N'70', N'1268893687085518848', NULL, N'', N'0', NULL, NULL, NULL), (N'94', N'1288657613998579712', NULL, N'', N'1', N'1m', N'60', N'200'), (N'95', N'1288657941770854400', NULL, N'', N'0', NULL, NULL, NULL), (N'96', N'1288658134067109888', NULL, N'', N'0', NULL, NULL, NULL), (N'97', N'1288658305156964352', NULL, N'', N'0', NULL, NULL, NULL), (N'98', N'1288658491216289792', NULL, N'', N'0', NULL, NULL, NULL), (N'99', N'1288658638302142464', NULL, N'', N'0', NULL, NULL, NULL), (N'100', N'1288658791784308736', NULL, N'', N'0', NULL, NULL, NULL), (N'101', N'1290849478956199936', NULL, N'', N'0', NULL, NULL, NULL), (N'102', N'1290849628051124224', NULL, N'', N'0', NULL, NULL, NULL), (N'103', N'1290849798553776128', NULL, N'', N'0', NULL, NULL, NULL), (N'105', N'1291259822512693248', NULL, N'', N'0', NULL, NULL, NULL), (N'106', N'1292620505149145088', NULL, N'', N'0', NULL, NULL, NULL), (N'107', N'1292620665505775616', NULL, N'', N'0', NULL, NULL, NULL), (N'108', N'1292620843398791168', NULL, N'', N'0', NULL, NULL, NULL), (N'109', N'1292621027574874112', NULL, N'', N'0', NULL, NULL, NULL), (N'110', N'1292621363161137152', NULL, N'', N'0', NULL, NULL, NULL), (N'111', N'1292621494837116928', NULL, N'', N'0', NULL, NULL, NULL), (N'112', N'1292621629260365824', NULL, N'', N'0', NULL, NULL, NULL), (N'113', N'1292622526073864192', NULL, N'', N'0', NULL, NULL, NULL), (N'114', N'1293470838745821184', NULL, N'', N'0', NULL, NULL, NULL), (N'115', N'1293471661785706496', NULL, N'', N'0', NULL, NULL, NULL), (N'116', N'1293472678392721408', NULL, N'', N'0', NULL, NULL, NULL), (N'117', N'1293472857510473728', NULL, N'', N'0', NULL, NULL, NULL), (N'118', N'1299273336009359360', NULL, N'', N'0', NULL, NULL, NULL), (N'119', N'1299273436282585088', NULL, N'', N'0', NULL, NULL, NULL), (N'120', N'1299273618470567936', NULL, N'', N'0', NULL, NULL, NULL), (N'121', N'1299273770182737920', NULL, N'', N'0', NULL, NULL, NULL), (N'122', N'1299273978023084032', NULL, N'', N'0', NULL, NULL, NULL), (N'123', N'1299274123225694208', NULL, N'', N'0', NULL, NULL, NULL), (N'124', N'1299274222299348992', NULL, N'', N'0', NULL, NULL, NULL), (N'125', N'1304238876758495232', NULL, N'', N'0', NULL, NULL, NULL), (N'126', N'1304678610343383040', NULL, N'', N'0', NULL, NULL, NULL), (N'127', N'1304679169305694208', NULL, N'', N'0', NULL, NULL, NULL), (N'128', N'1310460417141817344', NULL, N'', N'0', NULL, NULL, NULL), (N'129', N'1310502391475519488', NULL, N'', N'0', NULL, NULL, NULL), (N'130', N'1310515546943569920', NULL, N'', N'0', NULL, NULL, NULL), (N'131', N'1310515735292985344', NULL, N'', N'0', NULL, NULL, NULL), (N'132', N'1316628769783480320', NULL, N'', N'0', NULL, NULL, NULL), (N'133', N'1316628940663619584', NULL, N'', N'0', NULL, NULL, NULL), (N'134', N'1316629112428756992', NULL, N'', N'0', NULL, NULL, NULL), (N'135', N'1316652047017246720', NULL, N'', N'0', NULL, NULL, NULL), (N'136', N'1316913899996737536', NULL, N'', N'0', NULL, NULL, NULL), (N'137', N'1319200951383199744', NULL, N'', N'0', NULL, NULL, NULL), (N'138', N'1319221929807024128', NULL, N'', N'0', NULL, NULL, NULL), (N'139', N'1319554431134306304', NULL, N'', N'0', NULL, NULL, NULL), (N'140', N'1319554550458060800', NULL, N'', N'0', NULL, NULL, NULL), (N'141', N'1319554948434595840', NULL, N'', N'0', NULL, NULL, NULL), (N'142', N'1319555067183730688', NULL, N'', N'0', NULL, NULL, NULL), (N'143', N'1319555230765780992', NULL, N'', N'0', NULL, NULL, NULL), (N'144', N'1319555333790470144', NULL, N'', N'0', NULL, NULL, NULL), (N'145', N'1321001932510203904', NULL, N'', N'0', NULL, NULL, NULL), (N'146', N'1321002059803136000', NULL, N'', N'0', NULL, NULL, NULL), (N'147', N'1321002256440496128', NULL, N'', N'0', NULL, NULL, NULL), (N'148', N'1321002350686507008', NULL, N'', N'0', NULL, NULL, NULL), (N'149', N'1322190027988525056', NULL, N'', N'0', NULL, NULL, NULL)
+INSERT INTO [apigateway].[appapigatewayratelimitrule] VALUES (N'3', N'1261299170387169280', NULL, N'', N'0', NULL, NULL, NULL), (N'4', N'1261585859064872960', NULL, N'', N'0', NULL, NULL, NULL), (N'5', N'1261586605810368512', NULL, N'', N'0', NULL, NULL, NULL), (N'6', N'1261587558609436672', NULL, N'', N'0', NULL, NULL, NULL), (N'7', N'1261588213298348032', NULL, N'', N'0', NULL, NULL, NULL), (N'8', N'1261588367619375104', NULL, N'', N'0', NULL, NULL, NULL), (N'9', N'1261588628450557952', NULL, N'', N'0', NULL, NULL, NULL), (N'10', N'1261588881564221440', NULL, N'', N'0', NULL, NULL, NULL), (N'11', N'1261588983053795328', NULL, N'', N'0', NULL, NULL, NULL), (N'12', N'1261589139039961088', NULL, N'', N'0', NULL, NULL, NULL), (N'13', N'1261589197483393024', NULL, N'', N'0', NULL, NULL, NULL), (N'14', N'1261589278857084928', NULL, N'', N'0', NULL, NULL, NULL), (N'15', N'1261589420356124672', NULL, N'', N'0', NULL, NULL, NULL), (N'16', N'1261589960393736192', NULL, N'', N'0', NULL, NULL, NULL), (N'17', N'1261606600242085888', NULL, N'', N'0', NULL, NULL, NULL), (N'18', N'1261606689601732608', NULL, N'', N'0', NULL, NULL, NULL), (N'21', N'1262220447629058048', NULL, N'', N'0', NULL, NULL, NULL), (N'22', N'1262230734939758592', NULL, N'', N'0', NULL, NULL, NULL), (N'23', N'1262296916350869504', NULL, N'', N'0', NULL, NULL, NULL), (N'24', N'1262632376348594176', NULL, N'', N'0', NULL, NULL, NULL), (N'25', N'1262632791869902848', NULL, N'', N'0', NULL, NULL, NULL), (N'28', N'1262660336921235456', NULL, N'', N'0', NULL, NULL, NULL), (N'29', N'1262660528277966848', NULL, N'', N'0', NULL, NULL, NULL), (N'30', N'1262660706875625472', NULL, N'', N'0', NULL, NULL, NULL), (N'31', N'1262660966393991168', NULL, N'', N'0', NULL, NULL, NULL), (N'32', N'1262661109474283520', NULL, N'', N'0', NULL, NULL, NULL), (N'33', N'1262663888804663296', NULL, N'', N'0', NULL, NULL, NULL), (N'34', N'1262664024096133120', NULL, N'', N'0', NULL, NULL, NULL), (N'35', N'1262664186252120064', NULL, N'', N'0', NULL, NULL, NULL), (N'36', N'1262664357044178944', NULL, N'', N'0', NULL, NULL, NULL), (N'37', N'1262664632928718848', NULL, N'', N'0', NULL, NULL, NULL), (N'38', N'1262664751409418240', NULL, N'', N'0', NULL, NULL, NULL), (N'39', N'1262664871274237952', NULL, N'', N'0', NULL, NULL, NULL), (N'40', N'1262665026111164416', NULL, N'', N'0', NULL, NULL, NULL), (N'41', N'1262665159905267712', NULL, N'', N'0', NULL, NULL, NULL), (N'42', N'1262665329829105664', NULL, N'', N'0', NULL, NULL, NULL), (N'43', N'1262665456471920640', NULL, N'', N'0', NULL, NULL, NULL), (N'44', N'1262665628165754880', NULL, N'', N'0', NULL, NULL, NULL), (N'45', N'1262666172682883072', NULL, N'', N'0', NULL, NULL, NULL), (N'47', N'1262723402331885568', NULL, N'', N'0', NULL, NULL, NULL), (N'48', N'1262935771746734080', NULL, N'', N'0', NULL, NULL, NULL), (N'49', N'1262935906522304512', NULL, N'', N'0', NULL, NULL, NULL), (N'52', N'1263074419073593344', NULL, N'', N'0', NULL, NULL, NULL), (N'53', N'1263075249394790400', NULL, N'', N'0', NULL, NULL, NULL), (N'54', N'1263075593499684864', NULL, N'', N'0', NULL, NULL, NULL), (N'56', N'1263101898440146944', NULL, N'', N'0', NULL, NULL, NULL), (N'57', N'1263303878648569856', NULL, N'', N'0', NULL, NULL, NULL), (N'58', N'1263304204797648896', NULL, N'', N'0', NULL, NULL, NULL), (N'59', N'1263304872891555840', NULL, N'', N'0', NULL, NULL, NULL), (N'60', N'1263305106250047488', NULL, N'', N'0', NULL, NULL, NULL), (N'61', N'1263305244594970624', NULL, N'', N'0', NULL, NULL, NULL), (N'62', N'1263305430536855552', NULL, N'', N'0', NULL, NULL, NULL), (N'63', N'1263639172959174656', NULL, N'', N'0', NULL, NULL, NULL), (N'64', N'1264799968944640000', NULL, N'', N'0', NULL, NULL, NULL), (N'65', N'1264800070161584128', NULL, N'', N'0', NULL, NULL, NULL), (N'66', N'1267360794414161920', NULL, N'', N'0', NULL, NULL, NULL), (N'67', N'1267383367629807616', NULL, N'', N'0', NULL, NULL, NULL), (N'68', N'1267817055527632896', NULL, N'', N'0', NULL, NULL, NULL), (N'69', N'1267817221286526976', NULL, N'', N'0', NULL, NULL, NULL), (N'70', N'1268893687085518848', NULL, N'', N'0', NULL, NULL, NULL), (N'94', N'1288657613998579712', NULL, N'', N'1', N'1m', N'60', N'200'), (N'95', N'1288657941770854400', NULL, N'', N'0', NULL, NULL, NULL), (N'96', N'1288658134067109888', NULL, N'', N'0', NULL, NULL, NULL), (N'97', N'1288658305156964352', NULL, N'', N'0', NULL, NULL, NULL), (N'98', N'1288658491216289792', NULL, N'', N'0', NULL, NULL, NULL), (N'99', N'1288658638302142464', NULL, N'', N'0', NULL, NULL, NULL), (N'100', N'1288658791784308736', NULL, N'', N'0', NULL, NULL, NULL), (N'101', N'1290849478956199936', NULL, N'', N'0', NULL, NULL, NULL), (N'102', N'1290849628051124224', NULL, N'', N'0', NULL, NULL, NULL), (N'103', N'1290849798553776128', NULL, N'', N'0', NULL, NULL, NULL), (N'105', N'1291259822512693248', NULL, N'', N'0', NULL, NULL, NULL), (N'106', N'1292620505149145088', NULL, N'', N'0', NULL, NULL, NULL), (N'107', N'1292620665505775616', NULL, N'', N'0', NULL, NULL, NULL), (N'108', N'1292620843398791168', NULL, N'', N'0', NULL, NULL, NULL), (N'109', N'1292621027574874112', NULL, N'', N'0', NULL, NULL, NULL), (N'110', N'1292621363161137152', NULL, N'', N'0', NULL, NULL, NULL), (N'111', N'1292621494837116928', NULL, N'', N'0', NULL, NULL, NULL), (N'112', N'1292621629260365824', NULL, N'', N'0', NULL, NULL, NULL), (N'113', N'1292622526073864192', NULL, N'', N'0', NULL, NULL, NULL), (N'114', N'1293470838745821184', NULL, N'', N'0', NULL, NULL, NULL), (N'115', N'1293471661785706496', NULL, N'', N'0', NULL, NULL, NULL), (N'116', N'1293472678392721408', NULL, N'', N'0', NULL, NULL, NULL), (N'117', N'1293472857510473728', NULL, N'', N'0', NULL, NULL, NULL), (N'118', N'1299273336009359360', NULL, N'', N'0', NULL, NULL, NULL), (N'119', N'1299273436282585088', NULL, N'', N'0', NULL, NULL, NULL), (N'120', N'1299273618470567936', NULL, N'', N'0', NULL, NULL, NULL), (N'121', N'1299273770182737920', NULL, N'', N'0', NULL, NULL, NULL), (N'122', N'1299273978023084032', NULL, N'', N'0', NULL, NULL, NULL), (N'123', N'1299274123225694208', NULL, N'', N'0', NULL, NULL, NULL), (N'124', N'1299274222299348992', NULL, N'', N'0', NULL, NULL, NULL), (N'125', N'1304238876758495232', NULL, N'', N'0', NULL, NULL, NULL), (N'126', N'1304678610343383040', NULL, N'', N'0', NULL, NULL, NULL), (N'127', N'1304679169305694208', NULL, N'', N'0', NULL, NULL, NULL), (N'128', N'1310460417141817344', NULL, N'', N'0', NULL, NULL, NULL), (N'129', N'1310502391475519488', NULL, N'', N'0', NULL, NULL, NULL), (N'130', N'1310515546943569920', NULL, N'', N'0', NULL, NULL, NULL), (N'131', N'1310515735292985344', NULL, N'', N'0', NULL, NULL, NULL), (N'132', N'1316628769783480320', NULL, N'', N'0', NULL, NULL, NULL), (N'133', N'1316628940663619584', NULL, N'', N'0', NULL, NULL, NULL), (N'134', N'1316629112428756992', NULL, N'', N'0', NULL, NULL, NULL), (N'135', N'1316652047017246720', NULL, N'', N'0', NULL, NULL, NULL), (N'136', N'1316913899996737536', NULL, N'', N'0', NULL, NULL, NULL), (N'137', N'1319200951383199744', NULL, N'', N'0', NULL, NULL, NULL), (N'138', N'1319221929807024128', NULL, N'', N'0', NULL, NULL, NULL), (N'139', N'1319554431134306304', NULL, N'', N'0', NULL, NULL, NULL), (N'140', N'1319554550458060800', NULL, N'', N'0', NULL, NULL, NULL), (N'141', N'1319554948434595840', NULL, N'', N'0', NULL, NULL, NULL), (N'142', N'1319555067183730688', NULL, N'', N'0', NULL, NULL, NULL), (N'143', N'1319555230765780992', NULL, N'', N'0', NULL, NULL, NULL), (N'144', N'1319555333790470144', NULL, N'', N'0', NULL, NULL, NULL), (N'145', N'1321001932510203904', NULL, N'', N'0', NULL, NULL, NULL), (N'146', N'1321002059803136000', NULL, N'', N'0', NULL, NULL, NULL), (N'147', N'1321002256440496128', NULL, N'', N'0', NULL, NULL, NULL), (N'148', N'1321002350686507008', NULL, N'', N'0', NULL, NULL, NULL), (N'149', N'1322190027988525056', NULL, N'', N'0', NULL, NULL, NULL), (N'150', N'1322452079688458240', NULL, N'', N'0', NULL, NULL, NULL), (N'151', N'1322452183929495552', NULL, N'', N'0', NULL, NULL, NULL), (N'152', N'1322452308651319296', NULL, N'', N'0', NULL, NULL, NULL), (N'153', N'1322452858176446464', NULL, N'', N'0', NULL, NULL, NULL), (N'154', N'1322452989235863552', NULL, N'', N'0', NULL, NULL, NULL), (N'155', N'1322453089655889920', NULL, N'', N'0', NULL, NULL, NULL), (N'156', N'1329706860249804800', NULL, N'', N'0', NULL, NULL, NULL), (N'157', N'1329707002411544576', NULL, N'', N'0', NULL, NULL, NULL), (N'158', N'1329708512277098496', NULL, N'', N'0', NULL, NULL, NULL), (N'159', N'1329708625917571072', NULL, N'', N'0', NULL, NULL, NULL)
GO
COMMIT
@@ -486,7 +486,7 @@ GO
BEGIN TRANSACTION
GO
-INSERT INTO [apigateway].[appapigatewayreroute] VALUES (N'4', N'{}', N'84059fcecc91498b9beafac914865e2c', N'1261299170387169280', N'【后台管理】- 权限管理', N'/api/permission-management/permissions', N'', NULL, N'/api/permission-management/permissions', N'GET,PUT,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30010,', N'', NULL, NULL, NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'5', N'{}', N'f2312eed73cc4d3cbefcd1816849fd74', N'1261585859064872960', N'【身份认证服务】- 客户端', N'/api/identity-server/clients', N'', NULL, N'/api/identity-server/clients', N'POST,GET,', N'', N'', N'X-Forwarded-For:{RemoteIpAddress},', N'', N'', N'', NULL, N'1', N'', NULL, N'HTTP', N'127.0.0.1:30015,', N'', NULL, NULL, NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'6', N'{}', N'b764ec7b994147abb12974bfcee4a0a9', N'1261586605810368512', N'【身份认证服务】- 管理客户端', N'/api/identity-server/clients/{Id}', N'', NULL, N'/api/identity-server/clients/{Id}', N'GET,DELETE,PUT,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30015,', N'', NULL, NULL, NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'7', N'{}', N'b4ce189320804dc6b87e602594e93d35', N'1261587558609436672', N'【服务网关管理】- 路由组管理', N'/api/ApiGateway/RouteGroups', N'', N'', N'/api/ApiGateway/RouteGroups', N'GET,POST,PUT,DELETE,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'8', N'{}', N'8736fefa36da4b129f3fcf6aa095f2ce', N'1261588213298348032', N'【服务网关管理】- 查询单个路由组', N'/api/ApiGateway/RouteGroups/By-AppId/{AppId}', N'', N'', N'/api/ApiGateway/RouteGroups/By-AppId/{AppId}', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'9', N'{}', N'befd14ad39e244bc9dea7e0c01e642ce', N'1261588367619375104', N'【服务网关管理】- 查询所有有效路由组', N'/api/ApiGateway/RouteGroups/Actived', N'', N'', N'/api/ApiGateway/RouteGroups/Actived', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'10', N'{}', N'0a95945d77144ce69addb0d1e8d37837', N'1261588628450557952', N'【服务网关管理】- 基础配置', N'/api/ApiGateway/Globals', N'', N'', N'/api/ApiGateway/Globals', N'GET,POST,PUT,DELETE,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'11', N'{}', N'70ee7f919bf44b42b549c905316bfd75', N'1261588881564221440', N'【服务网关管理】- 查询单个基础配置', N'/api/ApiGateway/Globals/By-AppId/{AppId}', N'', N'', N'/api/ApiGateway/Globals/By-AppId/{AppId}', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'12', N'{}', N'caf54542d561428a9123ebed88e4b2e9', N'1261588983053795328', N'【服务网关管理】- 路由配置', N'/api/ApiGateway/Routes', N'', N'', N'/api/ApiGateway/Routes', N'GET,POST,PUT,DELETE,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'13', N'{}', N'df6c48fdaab44a37842992ae61c59dc5', N'1261589139039961088', N'【服务网关管理】- 通过标识查询路由', N'/api/ApiGateway/Routes/By-RouteId/{RouteId}', N'', N'', N'/api/ApiGateway/Routes/By-RouteId/{RouteId}', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'14', N'{}', N'aaeaedebd24a4011ad565b5559f84c5f', N'1261589197483393024', N'【服务网关管理】- 通过名称查询路由', N'/api/ApiGateway/Routes/By-RouteName/{RouteName}', N'', N'', N'/api/ApiGateway/Routes/By-RouteName/{RouteName}', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'15', N'{}', N'559c9f1b2b8c44caac86f7a643a16aaa', N'1261589278857084928', N'【服务网关管理】- 通过应用标识查询路由', N'/api/ApiGateway/Routes/By-AppId/{AppId}', N'', N'', N'/api/ApiGateway/Routes/By-AppId/{AppId}', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'16', N'{}', N'00d0a12f403a4a919c99c534bd76d0d0', N'1261589420356124672', N'【服务网关管理】- 清空应用标识下所有路由', N'/api/ApiGateway/Routes/Clear', N'', N'', N'/api/ApiGateway/Routes/Clear', N'DELETE,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'17', N'{}', N'8c308f1386ad49c799cd281eb95170ac', N'1261589960393736192', N'【服务网关管理】- 通过应用标识查询动态路由', N'/api/ApiGateway/DynamicRoutes/By-AppId/{AppId}', N'', NULL, N'/api/ApiGateway/DynamicRoutes/By-AppId/{AppId}', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, NULL, NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'18', N'{}', N'e659ebbf61534a978335cfeabdc0b375', N'1261606600242085888', N'【服务网关管理】- 通过应用标识查询聚合路由', N'/api/ApiGateway/Aggregates/by-AppId/{AppId}', N'', NULL, N'/api/ApiGateway/Aggregates/by-AppId/{AppId}', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, NULL, NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'19', N'{}', N'd665e4491b81413385858601d9cf9a1d', N'1261606689601732608', N'【服务网关管理】- 聚合路由', N'/api/ApiGateway/Aggregates', N'', NULL, N'/api/ApiGateway/Aggregates', N'GET,POST,PUT,DELETE,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, NULL, NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'22', N'{}', N'2aad614e2c2a497593a4784ff639c3d9', N'1262220447629058048', N'【身份认证服务】- 克隆客户端', N'/api/identity-server/clients/{id}/clone', N'', NULL, N'/api/identity-server/clients/{id}/clone', N'POST,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30015,', N'', NULL, NULL, NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'23', N'{}', N'1504c5e4a7334298878339a305445b21', N'1262230734939758592', N'【身份认证服务】- 可用的Api资源', N'/api/identity-server/clients/assignable-api-resources', N'', NULL, N'/api/identity-server/clients/assignable-api-resources', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30015,', N'', NULL, N'assignable-api-resources', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'25', N'{}', N'53dd1751d9104940a966006a5e93d1fa', N'1262296916350869504', N'【身份认证服务】- 可用的身份资源', N'/api/identity-server/clients/assignable-identity-resources', N'', NULL, N'/api/identity-server/clients/assignable-identity-resources', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30015,', N'', NULL, N'assignable-identity-resources', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'26', N'{}', N'3fccd1318d0d47d9aef85542668829a6', N'1262632376348594176', N'【身份认证服务】- Api资源', N'/api/identity-server/api-resources', N'', N'', N'/api/identity-server/api-resources', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'27', N'{}', N'de6bd0ddea6d4019b4855be5442fafdc', N'1262632791869902848', N'【身份认证服务】- 管理Api资源', N'/api/identity-server/api-resources/{id}', N'', N'', N'/api/identity-server/api-resources/{id}', N'GET,DELETE,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'30', N'{}', N'0f9875697b74420c9dc2eaf77099b210', N'1262660336921235456', N'【身份认证服务】- 用户登录', N'/api/account/login', N'', N'', N'/api/account/login', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'31', N'{}', N'a890c6ecc6a64c9fa313a0f6b5406e1c', N'1262660528277966848', N'【身份认证服务】- 用户登出', N'/api/account/logout', N'', N'', N'/api/account/logout', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'32', N'{}', N'88de580b6beb4d9d9d4367840ba1fcea', N'1262660706875625472', N'【身份认证服务】- 检查密码', N'/api/account/checkPassword', N'', N'', N'/api/account/checkPassword', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'33', N'{}', N'78f3c1adc7a54696af37a419eda47c62', N'1262660966393991168', N'【身份认证服务】- 个人信息页', N'/api/identity/my-profile', N'', N'', N'/api/identity/my-profile', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'34', N'{}', N'95b23aa5cebb40598a78c0761cfd0b26', N'1262661109474283520', N'【身份认证服务】- 修改密码', N'/api/identity/my-profile/change-password', N'', N'', N'/api/identity/my-profile/change-password', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'35', N'{}', N'4828f7c2aff8485189f37aba5de62d60', N'1262663888804663296', N'【身份认证管理】- 角色管理', N'/api/identity/roles', N'', N'', N'/api/identity/roles', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'36', N'{}', N'0fddcd3b50a24c6795ec9034fdb44778', N'1262664024096133120', N'【身份认证服务】- 角色列表', N'/api/identity/roles/all', N'', N'', N'/api/identity/roles/all', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'37', N'{}', N'191e555219e845069dfd93793263a840', N'1262664186252120064', N'【身份认证服务】- 单个角色', N'/api/identity/roles/{id}', N'', N'', N'/api/identity/roles/{id}', N'GET,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'38', N'{}', N'c316858e82f74e6ca6e923d6b3a3fa76', N'1262664357044178944', N'【身份认证服务】- 用户注册', N'/api/account/register', N'', N'', N'/api/account/register', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'39', N'{}', N'db53b6f957914a10a6a97ba306b1f6ef', N'1262664632928718848', N'【身份认证服务】- 单个用户', N'/api/identity/users/{id}', N'', N'', N'/api/identity/users/{id}', N'GET,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'40', N'{}', N'1833434b8ce34f8ab791e7e950f4c61f', N'1262664751409418240', N'【身份认证服务】- 用户管理', N'/api/identity/users', N'', N'', N'/api/identity/users', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'41', N'{}', N'b3c963a1612144918bffaf272697498c', N'1262664871274237952', N'【身份认证服务】- 用户角色', N'/api/identity/users/{id}/roles', N'', N'', N'/api/identity/users/{id}/roles', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'42', N'{}', N'33dd757b79cb4f52994af13bfb4f6783', N'1262665026111164416', N'【身份认证服务】- 通过用户名查询用户', N'/api/identity/users/by-username/{userName}', N'', N'', N'/api/identity/users/by-username/{userName}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'43', N'{}', N'e46fd6cb3a104da3aadfe0149fe4de68', N'1262665159905267712', N'【身份认证服务】- 通过邮件查询用户', N'/api/identity/users/by-email/{email}', N'', N'', N'/api/identity/users/by-email/{email}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'44', N'{}', N'8c8ec5ad6aaa4145981ee7ac876c36c9', N'1262665329829105664', N'【身份认证服务】- 通过标识查询用户', N'/api/identity/users/lookup/{id}', N'', N'', N'/api/identity/users/lookup/{id}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'45', N'{}', N'f5c0c8c02c0846fdbe5015cd86f3d81b', N'1262665456471920640', N'【身份认证服务】- 通过名称查询用户', N'/api/identity/users/lookup/by-username/{userName}', N'', N'', N'/api/identity/users/lookup/by-username/{userName}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'46', N'{}', N'ecf0ea4a3e3c4b2e8fa3621514d00c74', N'1262665628165754880', N'【基础服务】- 通过名称查询租户', N'/api/abp/multi-tenancy/tenants/by-name/{name}', N'', N'', N'/api/abp/multi-tenancy/tenants/by-name/{name}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'47', N'{}', N'69132bc515b64005af4292ce0dee5626', N'1262666172682883072', N'【基础服务】- 通过标识查询租户', N'/api/abp/multi-tenancy/tenants/by-id/{id}', N'', N'', N'/api/abp/multi-tenancy/tenants/by-id/{id}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'49', N'{}', N'35f48d7bc3694bbf95d64fe59aa631ac', N'1262723402331885568', N'【身份认证服务】- 已有的跨域资源', N'/api/identity-server/clients/distinct-cors-origins', N'', N'', N'/api/identity-server/clients/distinct-cors-origins', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'distinct-cors-origins', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'50', N'{}', N'f333d028839d4fc2aafa8509e674d7dd', N'1262935771746734080', N'【身份认证服务】- 身份资源', N'/api/identity-server/identity-resources', N'', N'', N'/api/identity-server/identity-resources', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'51', N'{}', N'dffd1bfaca5b4c1890221678f2b16cd5', N'1262935906522304512', N'【身份认证服务】- 身份资源管理', N'/api/identity-server/identity-resources/{id}', N'', N'', N'/api/identity-server/identity-resources/{id}', N'GET,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'54', N'{}', N'7b847d8434bc4d1db07fa8961d90c14a', N'1263074419073593344', N'【服务网关管理】- 接口代理', N'/api/abp/api-definition', N'', N'', N'/api/abp/apigateway/api-definition', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30001,', N'', N'', N'apigateway-api-definition', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'55', N'{}', N'ca2cedfa620045a9adef0be2f958c4bc', N'1263075249394790400', N'【服务网关管理】- 查询聚合路由', N'/api/ApiGateway/Aggregates/{RouteId}', N'', N'', N'/api/ApiGateway/Aggregates/{RouteId}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30001,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'57', N'{}', N'98fbc99fc8644946ac0a72cc3dc5fd1f', N'1263075593499684864', N'【服务网关管理】- 聚合路由配置', N'/api/ApiGateway/Aggregates/RouteConfig', N'', N'', N'/api/ApiGateway/Aggregates/RouteConfig', N'POST,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30001,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'59', N'{}', N'c692b30c72d4424eb4740ac49f4e9373', N'1263101898440146944', N'【服务网关管理】- 框架配置', N'/api/abp/application-configuration', N'', N'', N'/api/abp/apigateway/application-configuration', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30001,', N'', N'', N'apigateway-configuration', N'0', N'120000', N'1', N'', N'TEST-APP'), (N'60', N'{}', N'8409117162504f71aa66982f05c38a80', N'1263303878648569856', N'【平台服务】- 接口代理', N'/api/abp/api-definition', N'', N'', N'/api/abp/platform/api-definition', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'platform-api-definition', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'61', N'{}', N'9f520820071b4e14bc94ab57989cea1f', N'1263304204797648896', N'【平台服务】- 框架配置', N'/api/abp/application-configuration', N'', N'', N'/api/abp/platform/application-configuration', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'platform-configuration', N'0', N'120000', N'1', N'', N'TEST-APP'), (N'62', N'{}', N'530ab314560f41678b40f48da9383d51', N'1263304872891555840', N'【后台管理】- 租户管理', N'/api/tenant-management/tenants', N'', N'', N'/api/tenant-management/tenants', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'63', N'{}', N'21334c6da4c349cc883c38c13de0e754', N'1263305106250047488', N'【后台管理】- 特定租户管理', N'/api/tenant-management/tenants/{id}', N'', N'', N'/api/tenant-management/tenants/{id}', N'GET,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'64', N'{}', N'cc8fdf1b2d0b414ebf2dc51a6dc78305', N'1263305244594970624', N'【后台管理】- 租户连接字符串', N'/api/tenant-management/tenants/{id}/connection-string', N'', N'', N'/api/tenant-management/tenants/{id}/concatenation', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'2', N'30000', N'1', N'', N'TEST-APP'), (N'65', N'{}', N'aaf285ed10da4024ba561d5cf8c6322b', N'1263305430536855552', N'【后台管理】- 特定租户连接字符串', N'/api/tenant-management/tenants/{id}/connection-string/{name}', N'', N'', N'/api/tenant-management/tenants/{id}/concatenation/{name}', N'GET,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'1', N'30000', N'1', N'', N'TEST-APP'), (N'66', N'{}', N'b6ec80673b354c239def3bdce31b4cc0', N'1263639172959174656', N'【后台管理】- 全局设置', N'/api/setting-management/settings/by-global', N'', N'', N'/api/setting-management/settings/by-global', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'67', N'{}', N'755b4dce5c34444785fa3b647fef4131', N'1264799968944640000', N'【身份认证服务】- 验证手机号', N'/api/account/phone/verify', N'', N'', N'/api/account/phone/verify', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'68', N'{}', N'535191c570ae453ab320012304d7a62c', N'1264800070161584128', N'【身份认证服务】- 手机号注册', N'/api/account/phone/register', N'', N'', N'/api/account/phone/register', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'69', N'{}', N'723c9b111f9f4a1aa804118cdde193d3', N'1267360794414161920', N'【消息服务】- 通知', N'/signalr-hubs/notifications/{everything}', N'', N'', N'/signalr-hubs/notifications/{everything}', N'POST,GET,OPTIONS,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'ws', N'127.0.0.1:30020,', N'', N'', N'', N'1', N'30000', N'1', N'', N'TEST-APP'), (N'70', N'{}', N'f3aa2b42dd9f468aa5aae4ef64754427', N'1267383367629807616', N'【消息服务】- 通知0', N'/signalr-hubs/notifications', N'', N'', N'/signalr-hubs/notifications', N'GET,POST,PUT,DELETE,OPTIONS,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'ws', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'71', N'{}', N'0344947bb79b401baa2ef7b4e58297f6', N'1267817055527632896', N'【消息服务】- 聊天', N'/signalr-hubs/messages', N'', N'', N'/signalr-hubs/messages', N'GET,POST,PUT,DELETE,OPTIONS,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'ws', N'127.0.0.1:30020,', N'', N'', N'', N'1', N'30000', N'1', N'', N'TEST-APP'), (N'72', N'{}', N'6676b5e5f76d40739f9ccc3e371e2f18', N'1267817221286526976', N'【消息服务】- 聊天1', N'/signalr-hubs/messages/{everything}', N'', N'', N'/signalr-hubs/messages/{everything}', N'GET,POST,PUT,DELETE,OPTIONS,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'ws', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'73', N'{}', N'cfb5f09a12bf495fbcaf2fa5d9123a40', N'1268893687085518848', N'【身份认证服务】- 重置密码', N'/api/account/phone/reset-password', N'', N'', N'/api/account/phone/reset-password', N'PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'1', N'30000', N'1', N'', N'TEST-APP'), (N'101', N'{}', N'997a4c27a433458aafed9b8aa252d957', N'1288657613998579712', N'【身份认证服务】- 组织机构列表', N'/api/identity/organization-units', N'', N'', N'/api/identity/organization-units', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'102', N'{}', N'a2c6acc9882a425ab26bd3ad5a9c17c6', N'1288657941770854400', N'【身份认证服务】- 组织机构管理', N'/api/identity/organization-units/{id}', N'', N'', N'/api/identity/organization-units/{id}', N'GET,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'1', N'30000', N'1', N'', N'TEST-APP'), (N'103', N'{}', N'390acfb0e16943c6b61e731d47c282e9', N'1288658134067109888', N'【身份认证服务】- 组织机构移动', N'/api/identity/organization-units/{id}/move', N'', N'', N'/api/identity/organization-units/{id}/move', N'PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'104', N'{}', N'3515e75becf9447492ad60466b27c397', N'1288658305156964352', N'【身份认证服务】- 查询组织机构子级', N'/api/identity/organization-units/find-children', N'', N'', N'/api/identity/organization-units/find-children', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'105', N'{}', N'aab0a24d930f4f9687497e5ccaac2a31', N'1288658491216289792', N'【身份认证服务】- 查询组织机构最后一个子节点', N'/api/identity/organization-units/last-children', N'', N'', N'/api/identity/organization-units/last-children', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'106', N'{}', N'9b7c999b1c5140c497bc15914a815401', N'1288658638302142464', N'【身份认证服务】- 未加入组织机构角色', N'/api/identity/organization-units/{id}/unadded-roles', N'', N'', N'/api/identity/organization-units/{id}/unadded-roles', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'107', N'{}', N'b0cdb3f6908e42bd934ca99a78f22c3f', N'1288658791784308736', N'【身份认证服务】- 未加入组织机构用户', N'/api/identity/organization-units/{id}/unadded-users', N'', N'', N'/api/identity/organization-units/{id}/unadded-users', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'108', N'{}', N'1982bc6ffd92445b9b3f47067378d1fc', N'1290849478956199936', N'【后台管理】- 当前租户设置', N'/api/setting-management/settings/by-current-tenant', N'', N'', N'/api/setting-management/settings/by-current-tenant', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'109', N'{}', N'a7df3a04805d4cc8a6e6b3823c6dd468', N'1290849628051124224', N'【后台管理】- 用户设置', N'/api/setting-management/settings/by-user/{userId}', N'', N'', N'/api/setting-management/settings/by-user/{userId}', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'110', N'{}', N'ef6e38a529a345fab67f6a627cf20635', N'1290849798553776128', N'【后台管理】- 当前用户设置', N'/api/setting-management/settings/by-current-user', N'', N'', N'/api/setting-management/settings/by-current-user', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'112', N'{}', N'9844fed6507844f2ac64bd08649bd3a6', N'1291259822512693248', N'【身份认证服务】- 查询组织机构根节点', N'/api/identity/organization-units/root-node', N'', N'', N'/api/identity/organization-units/root-node', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'113', N'{}', N'24d8794cf8f943b4ac45d2bcccf7c128', N'1292620505149145088', N'【平台服务】- 文件系统', N'/api/file-management/file-system', N'', N'', N'/api/file-management/file-system', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'114', N'{}', N'0acf6762d3af43efb655107e0039f5fc', N'1292620665505775616', N'【平台服务】- 文件系统 - 目录管理', N'/api/file-management/file-system/folders', N'', N'', N'/api/file-management/file-system/folders', N'POST,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'115', N'{}', N'8b4363f70865419089b5f62ba35382df', N'1292620843398791168', N'【平台服务】- 文件系统 - 文件管理', N'/api/file-management/file-system/files', N'', N'', N'/api/file-management/file-system/files', N'GET,POST,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'1200000', N'1', N'', N'TEST-APP'), (N'116', N'{}', N'7eb315567bbc470bbbfd26923c5d0aba', N'1292621027574874112', N'【平台服务】- 文件系统 - 复制目录', N'/api/file-management/file-system/folders/copy', N'', N'', N'/api/file-management/file-system/folders/copy', N'PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'117', N'{}', N'af5853680cff454fa66ff6022f18da23', N'1292621363161137152', N'【平台服务】- 文件系统 - 移动目录', N'/api/file-management/file-system/folders/move', N'', N'', N'/api/file-management/file-system/folders/move', N'PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'118', N'{}', N'6daa6d8c8adb466899988fd8181c29a8', N'1292621494837116928', N'【平台服务】- 文件系统 - 复制文件', N'/api/file-management/file-system/files/copy', N'', N'', N'/api/file-management/file-system/files/copy', N'PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'119', N'{}', N'9560caaa3bd9424984c44724aa54bfe9', N'1292621629260365824', N'【平台服务】- 文件系统 - 移动文件', N'/api/file-management/file-system/files/move', N'', N'', N'/api/file-management/file-system/files/move', N'PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'120', N'{}', N'fc2aaa6035484201b9014912930fb7cb', N'1292622526073864192', N'【平台服务】- 文件系统 - 详情页', N'/api/file-management/file-system/profile', N'', N'', N'/api/file-management/file-system/profile', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'121', N'{}', N'c6c7b027000942dda8ba0d2e2d8cf705', N'1293470838745821184', N'【后台管理】- 框架配置', N'/api/abp/application-configuration', N'', N'', N'/api/abp/backend-admin/application-configuration', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'backend-admin-configuration', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'122', N'{}', N'becd4342079d4399abda5b5ba3b46fdc', N'1293471661785706496', N'【消息服务】- 框架配置', N'/api/abp/application-configuration', N'', N'', N'/api/abp/messages/application-configuration', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'messages-configuration', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'123', N'{}', N'c828140cee3043c18ffc274f6461f0f2', N'1293472678392721408', N'【后台管理】- 接口代理', N'/api/abp/api-definition', N'', N'', N'/api/abp/backend-admin/api-definition', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'backend-admin-api-definition', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'124', N'{}', N'e683cff8066d4c2899a17d0f618f1a0b', N'1293472857510473728', N'【消息服务】- 接口代理', N'/api/abp/api-definition', N'', N'', N'/api/abp/messages/api-definition', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'messages-api-definition', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'125', N'{}', N'0e9c3bff5b58428eba97a5516140ba5e', N'1299273336009359360', N'【消息服务】- Hangfire仪表板 ', N'/hangfire', N'', N'', N'/hangfire', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'126', N'{}', N'e906924ad3a947cf8e6956e2dd258192', N'1299273436282585088', N'【消息服务】- Hangfire仪表板 - 主页', N'/hangfire/', N'', N'', N'/hangfire/', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'127', N'{}', N'e02f2049efbc4ee1ad6629bd0341ed2b', N'1299273618470567936', N'【消息服务】- Hangfire仪表板 - 状态', N'/hangfire/stats', N'', N'', N'/hangfire/stats', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'128', N'{}', N'f8d2b2f0f1d649c2a07eeef23d6adb0e', N'1299273770182737920', N'【消息服务】- Hangfire仪表板 - 作业管理', N'/hangfire/jobs/{everything}', N'', N'', N'/hangfire/jobs/{everything}', N'GET,POST,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'129', N'{}', N'9785be7a29774b468e271b23009fe115', N'1299273978023084032', N'【消息服务】- Hangfire仪表板 - 重试', N'/hangfire/retries', N'', N'', N'/hangfire/retries', N'GET,POST,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'130', N'{}', N'9c0c1cd196bb45c0bc03fafb7a1eb8f2', N'1299274123225694208', N'【消息服务】- Hangfire仪表板 - 周期性作业', N'/hangfire/recurring', N'', N'', N'/hangfire/recurring', N'GET,POST,DELETE,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'131', N'{}', N'243bafe828be463ea63a3e2b521f9923', N'1299274222299348992', N'【消息服务】- Hangfire仪表板 - 服务器列表', N'/hangfire/servers', N'', N'', N'/hangfire/servers', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'132', N'{}', N'57a8ac1b41bb434cad38fbde0e2ba2f0', N'1304238876758495232', N'【后台管理】- 管理功能', N'/api/feature-management/features', N'', N'', N'/api/feature-management/features', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'133', N'{}', N'40a150f629b047f587c91a9436a699c0', N'1304678610343383040', N'【身份认证服务】- 接口代理', N'/api/abp/api-definition', N'', N'', N'/api/abp/identity-server/api-definition', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'identity-server-api-definition', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'134', N'{}', N'3a2d5d538fa44ac690402fc5c4e1a401', N'1304679169305694208', N'【身份认证服务】- 框架配置', N'/api/abp/application-configuration', N'', N'', N'/api/abp/identity-server/application-configuration', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'identity-server-configuration', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'135', N'{}', N'2ecfe7483bc94c28ad0769b654eb765d', N'1310460417141817344', N'【后台管理】- 审计日志列表', N'/api/auditing/audit-log', N'', N'', N'/api/auditing/audit-log', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'136', N'{}', N'744e340c0024462d88458b7ea9605b3c', N'1310502391475519488', N'【后台服务】- 安全日志列表', N'/api/auditing/security-log', N'', N'', N'/api/auditing/security-log', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'137', N'{}', N'a99639f4172547c4ba9b4f4ca5cb4ab9', N'1310515546943569920', N'【后台服务】- 安全日志', N'/api/auditing/security-log/{id}', N'', N'', N'/api/auditing/security-log/{id}', N'DELETE,GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'138', N'{}', N'c3ebc82d55f640fb9d70a911e97e4ec1', N'1310515735292985344', N'【后台管理】- 审计日志', N'/api/auditing/audit-log/{id}', N'', N'', N'/api/auditing/audit-log/{id}', N'DELETE,GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'139', N'{}', N'0379fcb3a9cd4b13b562b3b5b5c3eb7d', N'1316628769783480320', N'【身份认证服务】- 声明类型', N'/api/identity/claim-types', N'', N'', N'/api/identity/claim-types', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'140', N'{}', N'de25c9a80d994f728b37eb483b2f5127', N'1316628940663619584', N'【身份认证服务】- 管理声明类型', N'/api/identity/claim-types/{id}', N'', N'', N'/api/identity/claim-types/{id}', N'GET,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'141', N'{}', N'25c19106baff4cf3a877ae8cd690a1b5', N'1316629112428756992', N'【身份认证服务】- 查询在用的声明类型列表', N'/api/identity/claim-types/actived-list', N'', N'', N'/api/identity/claim-types/actived-list', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'142', N'{}', N'd42f8b779cf344eeaa24df0ae37fb7cf', N'1316652047017246720', N'【身份认证服务】- 管理用户声明', N'/api/identity/users/claims/{id}', N'', N'', N'/api/identity/users/claims/{id}', N'POST,PUT,DELETE,GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'143', N'{}', N'b86af44a34a14db4b482df8550f1bde1', N'1316913899996737536', N'【身份认证管理】- 管理角色声明', N'/api/identity/roles/claims/{id}', N'', N'', N'/api/identity/roles/claims/{id}', N'GET,POST,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'144', N'{}', N'51a14bc295044de985ae014fbcc5bddf', N'1319200951383199744', N'【IdentityServer4】- 发现端点', N'/.well-known/openid-configuration', N'', N'', N'/.well-known/openid-configuration', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:44385,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'145', N'{}', N'9d859a444d774e93818237e53b6cc102', N'1319221929807024128', N'【身份认证服务】- 查询所有组织机构', N'/api/identity/organization-units/all', N'', N'', N'/api/identity/organization-units/all', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'146', N'{}', N'89f42175b24540caba2a1fded145acf8', N'1319554431134306304', N'【身份认证服务】- 管理组织机构用户', N'/api/identity/organization-units/{id}/users', N'', N'', N'/api/identity/organization-units/{id}/users', N'POST,GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'147', N'{}', N'126d82509cec43eda712e94737b01039', N'1319554550458060800', N'【身份认证服务】- 管理组织机构角色', N'/api/identity/organization-units/{id}/roles', N'', N'', N'/api/identity/organization-units/{id}/roles', N'POST,GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'148', N'{}', N'824f5eee6877489f96f1022e306c968a', N'1319554948434595840', N'【身份认证服务】- 管理角色组织机构', N'/api/identity/roles/{id}/organization-units', N'', N'', N'/api/identity/roles/{id}/organization-units', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'149', N'{}', N'fe1379d4a13f41afb6410f4c948871f3', N'1319555067183730688', N'【身份认证服务】- 删除角色组织机构', N'/api/identity/roles/{id}/organization-units/{ouId}', N'', N'', N'/api/identity/roles/{id}/organization-units/{ouId}', N'DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'150', N'{}', N'197a69bb723346aba3601bd61e7fa655', N'1319555230765780992', N'【身份认证服务】- 管理用户组织机构', N'/api/identity/users/{id}/organization-units', N'', N'', N'/api/identity/users/{id}/organization-units', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'151', N'{}', N'1a7e6d0b1c95484f82a75a2ce6e6f453', N'1319555333790470144', N'【身份认证服务】- 删除用户组织机构', N'/api/identity/users/{id}/organization-units/{ouId}', N'', N'', N'/api/identity/users/{id}/organization-units/{ouId}', N'DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'152', N'{}', N'ecfa9bbd19694097b33e691b653f2124', N'1321001932510203904', N'【消息服务】- 我的消息', N'/api/im/chat/my-messages', N'', N'', N'/api/im/chat/my-messages', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'153', N'{}', N'4867ad188ca54acb8b961d20297b6545', N'1321002059803136000', N'【消息服务】- 我的最近消息', N'/api/im/chat/my-last-messages', N'', N'', N'/api/im/chat/my-last-messages', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'154', N'{}', N'291ab802d7bc4af98fc15c509f98fa75', N'1321002256440496128', N'【消息服务】- 我的朋友', N'/api/im/my-friends', N'', N'', N'/api/im/my-friends', N'GET,POST,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'155', N'{}', N'08438dabb1e849988e0c304f82b08a10', N'1321002350686507008', N'【消息服务】- 我的所有朋友', N'/api/im/my-friends/all', N'', N'', N'/api/im/my-friends/all', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'156', N'{}', N'cecf632785b7402299764698369c751f', N'1322190027988525056', N'【消息服务】- 发送好友请求', N'/api/im/my-friends/add-request', N'', N'', N'/api/im/my-friends/add-request', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP')
+INSERT INTO [apigateway].[appapigatewayreroute] VALUES (N'4', N'{}', N'84059fcecc91498b9beafac914865e2c', N'1261299170387169280', N'【后台管理】- 权限管理', N'/api/permission-management/permissions', N'', NULL, N'/api/permission-management/permissions', N'GET,PUT,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30010,', N'', NULL, NULL, NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'5', N'{}', N'f2312eed73cc4d3cbefcd1816849fd74', N'1261585859064872960', N'【身份认证服务】- 客户端', N'/api/identity-server/clients', N'', NULL, N'/api/identity-server/clients', N'POST,GET,', N'', N'', N'X-Forwarded-For:{RemoteIpAddress},', N'', N'', N'', NULL, N'1', N'', NULL, N'HTTP', N'127.0.0.1:30015,', N'', NULL, NULL, NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'6', N'{}', N'b764ec7b994147abb12974bfcee4a0a9', N'1261586605810368512', N'【身份认证服务】- 管理客户端', N'/api/identity-server/clients/{Id}', N'', NULL, N'/api/identity-server/clients/{Id}', N'GET,DELETE,PUT,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30015,', N'', NULL, NULL, NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'7', N'{}', N'b4ce189320804dc6b87e602594e93d35', N'1261587558609436672', N'【服务网关管理】- 路由组管理', N'/api/ApiGateway/RouteGroups', N'', N'', N'/api/ApiGateway/RouteGroups', N'GET,POST,PUT,DELETE,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'8', N'{}', N'8736fefa36da4b129f3fcf6aa095f2ce', N'1261588213298348032', N'【服务网关管理】- 查询单个路由组', N'/api/ApiGateway/RouteGroups/By-AppId/{AppId}', N'', N'', N'/api/ApiGateway/RouteGroups/By-AppId/{AppId}', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'9', N'{}', N'befd14ad39e244bc9dea7e0c01e642ce', N'1261588367619375104', N'【服务网关管理】- 查询所有有效路由组', N'/api/ApiGateway/RouteGroups/Actived', N'', N'', N'/api/ApiGateway/RouteGroups/Actived', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'10', N'{}', N'0a95945d77144ce69addb0d1e8d37837', N'1261588628450557952', N'【服务网关管理】- 基础配置', N'/api/ApiGateway/Globals', N'', N'', N'/api/ApiGateway/Globals', N'GET,POST,PUT,DELETE,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'11', N'{}', N'70ee7f919bf44b42b549c905316bfd75', N'1261588881564221440', N'【服务网关管理】- 查询单个基础配置', N'/api/ApiGateway/Globals/By-AppId/{AppId}', N'', N'', N'/api/ApiGateway/Globals/By-AppId/{AppId}', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'12', N'{}', N'caf54542d561428a9123ebed88e4b2e9', N'1261588983053795328', N'【服务网关管理】- 路由配置', N'/api/ApiGateway/Routes', N'', N'', N'/api/ApiGateway/Routes', N'GET,POST,PUT,DELETE,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'13', N'{}', N'df6c48fdaab44a37842992ae61c59dc5', N'1261589139039961088', N'【服务网关管理】- 通过标识查询路由', N'/api/ApiGateway/Routes/By-RouteId/{RouteId}', N'', N'', N'/api/ApiGateway/Routes/By-RouteId/{RouteId}', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'14', N'{}', N'aaeaedebd24a4011ad565b5559f84c5f', N'1261589197483393024', N'【服务网关管理】- 通过名称查询路由', N'/api/ApiGateway/Routes/By-RouteName/{RouteName}', N'', N'', N'/api/ApiGateway/Routes/By-RouteName/{RouteName}', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'15', N'{}', N'559c9f1b2b8c44caac86f7a643a16aaa', N'1261589278857084928', N'【服务网关管理】- 通过应用标识查询路由', N'/api/ApiGateway/Routes/By-AppId/{AppId}', N'', N'', N'/api/ApiGateway/Routes/By-AppId/{AppId}', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'16', N'{}', N'00d0a12f403a4a919c99c534bd76d0d0', N'1261589420356124672', N'【服务网关管理】- 清空应用标识下所有路由', N'/api/ApiGateway/Routes/Clear', N'', N'', N'/api/ApiGateway/Routes/Clear', N'DELETE,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, N'', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'17', N'{}', N'8c308f1386ad49c799cd281eb95170ac', N'1261589960393736192', N'【服务网关管理】- 通过应用标识查询动态路由', N'/api/ApiGateway/DynamicRoutes/By-AppId/{AppId}', N'', NULL, N'/api/ApiGateway/DynamicRoutes/By-AppId/{AppId}', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, NULL, NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'18', N'{}', N'e659ebbf61534a978335cfeabdc0b375', N'1261606600242085888', N'【服务网关管理】- 通过应用标识查询聚合路由', N'/api/ApiGateway/Aggregates/by-AppId/{AppId}', N'', NULL, N'/api/ApiGateway/Aggregates/by-AppId/{AppId}', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, NULL, NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'19', N'{}', N'd665e4491b81413385858601d9cf9a1d', N'1261606689601732608', N'【服务网关管理】- 聚合路由', N'/api/ApiGateway/Aggregates', N'', NULL, N'/api/ApiGateway/Aggregates', N'GET,POST,PUT,DELETE,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30001,', N'', NULL, NULL, NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'22', N'{}', N'2aad614e2c2a497593a4784ff639c3d9', N'1262220447629058048', N'【身份认证服务】- 克隆客户端', N'/api/identity-server/clients/{id}/clone', N'', NULL, N'/api/identity-server/clients/{id}/clone', N'POST,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30015,', N'', NULL, NULL, NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'23', N'{}', N'1504c5e4a7334298878339a305445b21', N'1262230734939758592', N'【身份认证服务】- 可用的Api资源', N'/api/identity-server/clients/assignable-api-resources', N'', NULL, N'/api/identity-server/clients/assignable-api-resources', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30015,', N'', NULL, N'assignable-api-resources', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'25', N'{}', N'53dd1751d9104940a966006a5e93d1fa', N'1262296916350869504', N'【身份认证服务】- 可用的身份资源', N'/api/identity-server/clients/assignable-identity-resources', N'', NULL, N'/api/identity-server/clients/assignable-identity-resources', N'GET,', N'', N'', N'', N'', N'', N'', NULL, N'1', NULL, NULL, N'HTTP', N'127.0.0.1:30015,', N'', NULL, N'assignable-identity-resources', NULL, N'30000', N'1', NULL, N'TEST-APP'), (N'26', N'{}', N'3fccd1318d0d47d9aef85542668829a6', N'1262632376348594176', N'【身份认证服务】- Api资源', N'/api/identity-server/api-resources', N'', N'', N'/api/identity-server/api-resources', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'27', N'{}', N'de6bd0ddea6d4019b4855be5442fafdc', N'1262632791869902848', N'【身份认证服务】- 管理Api资源', N'/api/identity-server/api-resources/{id}', N'', N'', N'/api/identity-server/api-resources/{id}', N'GET,DELETE,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'30', N'{}', N'0f9875697b74420c9dc2eaf77099b210', N'1262660336921235456', N'【身份认证服务】- 用户登录', N'/api/account/login', N'', N'', N'/api/account/login', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'31', N'{}', N'a890c6ecc6a64c9fa313a0f6b5406e1c', N'1262660528277966848', N'【身份认证服务】- 用户登出', N'/api/account/logout', N'', N'', N'/api/account/logout', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'32', N'{}', N'88de580b6beb4d9d9d4367840ba1fcea', N'1262660706875625472', N'【身份认证服务】- 检查密码', N'/api/account/checkPassword', N'', N'', N'/api/account/checkPassword', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'33', N'{}', N'78f3c1adc7a54696af37a419eda47c62', N'1262660966393991168', N'【身份认证服务】- 个人信息页', N'/api/identity/my-profile', N'', N'', N'/api/identity/my-profile', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'34', N'{}', N'95b23aa5cebb40598a78c0761cfd0b26', N'1262661109474283520', N'【身份认证服务】- 修改密码', N'/api/identity/my-profile/change-password', N'', N'', N'/api/identity/my-profile/change-password', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'35', N'{}', N'4828f7c2aff8485189f37aba5de62d60', N'1262663888804663296', N'【身份认证管理】- 角色管理', N'/api/identity/roles', N'', N'', N'/api/identity/roles', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'36', N'{}', N'0fddcd3b50a24c6795ec9034fdb44778', N'1262664024096133120', N'【身份认证服务】- 角色列表', N'/api/identity/roles/all', N'', N'', N'/api/identity/roles/all', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'37', N'{}', N'191e555219e845069dfd93793263a840', N'1262664186252120064', N'【身份认证服务】- 单个角色', N'/api/identity/roles/{id}', N'', N'', N'/api/identity/roles/{id}', N'GET,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'38', N'{}', N'c316858e82f74e6ca6e923d6b3a3fa76', N'1262664357044178944', N'【身份认证服务】- 用户注册', N'/api/account/register', N'', N'', N'/api/account/register', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'39', N'{}', N'db53b6f957914a10a6a97ba306b1f6ef', N'1262664632928718848', N'【身份认证服务】- 单个用户', N'/api/identity/users/{id}', N'', N'', N'/api/identity/users/{id}', N'GET,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'40', N'{}', N'1833434b8ce34f8ab791e7e950f4c61f', N'1262664751409418240', N'【身份认证服务】- 用户管理', N'/api/identity/users', N'', N'', N'/api/identity/users', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'41', N'{}', N'b3c963a1612144918bffaf272697498c', N'1262664871274237952', N'【身份认证服务】- 用户角色', N'/api/identity/users/{id}/roles', N'', N'', N'/api/identity/users/{id}/roles', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'42', N'{}', N'33dd757b79cb4f52994af13bfb4f6783', N'1262665026111164416', N'【身份认证服务】- 通过用户名查询用户', N'/api/identity/users/by-username/{userName}', N'', N'', N'/api/identity/users/by-username/{userName}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'43', N'{}', N'e46fd6cb3a104da3aadfe0149fe4de68', N'1262665159905267712', N'【身份认证服务】- 通过邮件查询用户', N'/api/identity/users/by-email/{email}', N'', N'', N'/api/identity/users/by-email/{email}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'44', N'{}', N'8c8ec5ad6aaa4145981ee7ac876c36c9', N'1262665329829105664', N'【身份认证服务】- 通过标识查询用户', N'/api/identity/users/lookup/{id}', N'', N'', N'/api/identity/users/lookup/{id}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'45', N'{}', N'f5c0c8c02c0846fdbe5015cd86f3d81b', N'1262665456471920640', N'【身份认证服务】- 通过名称查询用户', N'/api/identity/users/lookup/by-username/{userName}', N'', N'', N'/api/identity/users/lookup/by-username/{userName}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'46', N'{}', N'ecf0ea4a3e3c4b2e8fa3621514d00c74', N'1262665628165754880', N'【基础服务】- 通过名称查询租户', N'/api/abp/multi-tenancy/tenants/by-name/{name}', N'', N'', N'/api/abp/multi-tenancy/tenants/by-name/{name}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'47', N'{}', N'69132bc515b64005af4292ce0dee5626', N'1262666172682883072', N'【基础服务】- 通过标识查询租户', N'/api/abp/multi-tenancy/tenants/by-id/{id}', N'', N'', N'/api/abp/multi-tenancy/tenants/by-id/{id}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'49', N'{}', N'35f48d7bc3694bbf95d64fe59aa631ac', N'1262723402331885568', N'【身份认证服务】- 已有的跨域资源', N'/api/identity-server/clients/distinct-cors-origins', N'', N'', N'/api/identity-server/clients/distinct-cors-origins', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'distinct-cors-origins', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'50', N'{}', N'f333d028839d4fc2aafa8509e674d7dd', N'1262935771746734080', N'【身份认证服务】- 身份资源', N'/api/identity-server/identity-resources', N'', N'', N'/api/identity-server/identity-resources', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'51', N'{}', N'dffd1bfaca5b4c1890221678f2b16cd5', N'1262935906522304512', N'【身份认证服务】- 身份资源管理', N'/api/identity-server/identity-resources/{id}', N'', N'', N'/api/identity-server/identity-resources/{id}', N'GET,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'54', N'{}', N'7b847d8434bc4d1db07fa8961d90c14a', N'1263074419073593344', N'【服务网关管理】- 接口代理', N'/api/abp/api-definition', N'', N'', N'/api/abp/apigateway/api-definition', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30001,', N'', N'', N'apigateway-api-definition', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'55', N'{}', N'ca2cedfa620045a9adef0be2f958c4bc', N'1263075249394790400', N'【服务网关管理】- 查询聚合路由', N'/api/ApiGateway/Aggregates/{RouteId}', N'', N'', N'/api/ApiGateway/Aggregates/{RouteId}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30001,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'57', N'{}', N'98fbc99fc8644946ac0a72cc3dc5fd1f', N'1263075593499684864', N'【服务网关管理】- 聚合路由配置', N'/api/ApiGateway/Aggregates/RouteConfig', N'', N'', N'/api/ApiGateway/Aggregates/RouteConfig', N'POST,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30001,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'59', N'{}', N'c692b30c72d4424eb4740ac49f4e9373', N'1263101898440146944', N'【服务网关管理】- 框架配置', N'/api/abp/application-configuration', N'', N'', N'/api/abp/apigateway/application-configuration', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30001,', N'', N'', N'apigateway-configuration', N'0', N'120000', N'1', N'', N'TEST-APP'), (N'60', N'{}', N'8409117162504f71aa66982f05c38a80', N'1263303878648569856', N'【平台服务】- 接口代理', N'/api/abp/api-definition', N'', N'', N'/api/abp/platform/api-definition', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'platform-api-definition', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'61', N'{}', N'9f520820071b4e14bc94ab57989cea1f', N'1263304204797648896', N'【平台服务】- 框架配置', N'/api/abp/application-configuration', N'', N'', N'/api/abp/platform/application-configuration', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'platform-configuration', N'0', N'120000', N'1', N'', N'TEST-APP'), (N'62', N'{}', N'530ab314560f41678b40f48da9383d51', N'1263304872891555840', N'【后台管理】- 租户管理', N'/api/tenant-management/tenants', N'', N'', N'/api/tenant-management/tenants', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'63', N'{}', N'21334c6da4c349cc883c38c13de0e754', N'1263305106250047488', N'【后台管理】- 特定租户管理', N'/api/tenant-management/tenants/{id}', N'', N'', N'/api/tenant-management/tenants/{id}', N'GET,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'64', N'{}', N'cc8fdf1b2d0b414ebf2dc51a6dc78305', N'1263305244594970624', N'【后台管理】- 租户连接字符串', N'/api/tenant-management/tenants/{id}/connection-string', N'', N'', N'/api/tenant-management/tenants/{id}/concatenation', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'2', N'30000', N'1', N'', N'TEST-APP'), (N'65', N'{}', N'aaf285ed10da4024ba561d5cf8c6322b', N'1263305430536855552', N'【后台管理】- 特定租户连接字符串', N'/api/tenant-management/tenants/{id}/connection-string/{name}', N'', N'', N'/api/tenant-management/tenants/{id}/concatenation/{name}', N'GET,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'1', N'30000', N'1', N'', N'TEST-APP'), (N'66', N'{}', N'6a7da198f4c84d94969a437adc47642b', N'1263639172959174656', N'【后台管理】- 全局设置', N'/api/setting-management/settings/by-global', N'', N'', N'/api/setting-management/settings/by-global/app', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'setting-global', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'67', N'{}', N'755b4dce5c34444785fa3b647fef4131', N'1264799968944640000', N'【身份认证服务】- 验证手机号', N'/api/account/phone/verify', N'', N'', N'/api/account/phone/verify', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'68', N'{}', N'535191c570ae453ab320012304d7a62c', N'1264800070161584128', N'【身份认证服务】- 手机号注册', N'/api/account/phone/register', N'', N'', N'/api/account/phone/register', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'69', N'{}', N'723c9b111f9f4a1aa804118cdde193d3', N'1267360794414161920', N'【消息服务】- 通知', N'/signalr-hubs/notifications/{everything}', N'', N'', N'/signalr-hubs/notifications/{everything}', N'POST,GET,OPTIONS,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'ws', N'127.0.0.1:30020,', N'', N'', N'', N'1', N'30000', N'1', N'', N'TEST-APP'), (N'70', N'{}', N'f3aa2b42dd9f468aa5aae4ef64754427', N'1267383367629807616', N'【消息服务】- 通知0', N'/signalr-hubs/notifications', N'', N'', N'/signalr-hubs/notifications', N'GET,POST,PUT,DELETE,OPTIONS,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'ws', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'71', N'{}', N'0344947bb79b401baa2ef7b4e58297f6', N'1267817055527632896', N'【消息服务】- 聊天', N'/signalr-hubs/messages', N'', N'', N'/signalr-hubs/messages', N'GET,POST,PUT,DELETE,OPTIONS,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'ws', N'127.0.0.1:30020,', N'', N'', N'', N'1', N'30000', N'1', N'', N'TEST-APP'), (N'72', N'{}', N'6676b5e5f76d40739f9ccc3e371e2f18', N'1267817221286526976', N'【消息服务】- 聊天1', N'/signalr-hubs/messages/{everything}', N'', N'', N'/signalr-hubs/messages/{everything}', N'GET,POST,PUT,DELETE,OPTIONS,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'ws', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'73', N'{}', N'cfb5f09a12bf495fbcaf2fa5d9123a40', N'1268893687085518848', N'【身份认证服务】- 重置密码', N'/api/account/phone/reset-password', N'', N'', N'/api/account/phone/reset-password', N'PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'1', N'30000', N'1', N'', N'TEST-APP'), (N'101', N'{}', N'997a4c27a433458aafed9b8aa252d957', N'1288657613998579712', N'【身份认证服务】- 组织机构列表', N'/api/identity/organization-units', N'', N'', N'/api/identity/organization-units', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'102', N'{}', N'a2c6acc9882a425ab26bd3ad5a9c17c6', N'1288657941770854400', N'【身份认证服务】- 组织机构管理', N'/api/identity/organization-units/{id}', N'', N'', N'/api/identity/organization-units/{id}', N'GET,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'1', N'30000', N'1', N'', N'TEST-APP'), (N'103', N'{}', N'390acfb0e16943c6b61e731d47c282e9', N'1288658134067109888', N'【身份认证服务】- 组织机构移动', N'/api/identity/organization-units/{id}/move', N'', N'', N'/api/identity/organization-units/{id}/move', N'PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'104', N'{}', N'3515e75becf9447492ad60466b27c397', N'1288658305156964352', N'【身份认证服务】- 查询组织机构子级', N'/api/identity/organization-units/find-children', N'', N'', N'/api/identity/organization-units/find-children', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'105', N'{}', N'aab0a24d930f4f9687497e5ccaac2a31', N'1288658491216289792', N'【身份认证服务】- 查询组织机构最后一个子节点', N'/api/identity/organization-units/last-children', N'', N'', N'/api/identity/organization-units/last-children', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'106', N'{}', N'9b7c999b1c5140c497bc15914a815401', N'1288658638302142464', N'【身份认证服务】- 未加入组织机构角色', N'/api/identity/organization-units/{id}/unadded-roles', N'', N'', N'/api/identity/organization-units/{id}/unadded-roles', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'107', N'{}', N'b0cdb3f6908e42bd934ca99a78f22c3f', N'1288658791784308736', N'【身份认证服务】- 未加入组织机构用户', N'/api/identity/organization-units/{id}/unadded-users', N'', N'', N'/api/identity/organization-units/{id}/unadded-users', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'108', N'{}', N'9362040d10a94fb991f60bc391efcb85', N'1290849478956199936', N'【后台管理】- 当前租户设置', N'/api/setting-management/settings/by-current-tenant', N'', N'', N'/api/setting-management/settings/by-current-tenant/app', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'setting-current-tenant', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'109', N'{}', N'a7df3a04805d4cc8a6e6b3823c6dd468', N'1290849628051124224', N'【后台管理】- 用户设置', N'/api/setting-management/settings/by-user/{userId}', N'', N'', N'/api/setting-management/settings/by-user/{userId}', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'110', N'{}', N'ef6e38a529a345fab67f6a627cf20635', N'1290849798553776128', N'【后台管理】- 当前用户设置', N'/api/setting-management/settings/by-current-user', N'', N'', N'/api/setting-management/settings/by-current-user', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'112', N'{}', N'9844fed6507844f2ac64bd08649bd3a6', N'1291259822512693248', N'【身份认证服务】- 查询组织机构根节点', N'/api/identity/organization-units/root-node', N'', N'', N'/api/identity/organization-units/root-node', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'113', N'{}', N'24d8794cf8f943b4ac45d2bcccf7c128', N'1292620505149145088', N'【平台服务】- 文件系统', N'/api/file-management/file-system', N'', N'', N'/api/file-management/file-system', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'114', N'{}', N'0acf6762d3af43efb655107e0039f5fc', N'1292620665505775616', N'【平台服务】- 文件系统 - 目录管理', N'/api/file-management/file-system/folders', N'', N'', N'/api/file-management/file-system/folders', N'POST,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'115', N'{}', N'8b4363f70865419089b5f62ba35382df', N'1292620843398791168', N'【平台服务】- 文件系统 - 文件管理', N'/api/file-management/file-system/files', N'', N'', N'/api/file-management/file-system/files', N'GET,POST,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'1200000', N'1', N'', N'TEST-APP'), (N'116', N'{}', N'7eb315567bbc470bbbfd26923c5d0aba', N'1292621027574874112', N'【平台服务】- 文件系统 - 复制目录', N'/api/file-management/file-system/folders/copy', N'', N'', N'/api/file-management/file-system/folders/copy', N'PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'117', N'{}', N'af5853680cff454fa66ff6022f18da23', N'1292621363161137152', N'【平台服务】- 文件系统 - 移动目录', N'/api/file-management/file-system/folders/move', N'', N'', N'/api/file-management/file-system/folders/move', N'PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'118', N'{}', N'6daa6d8c8adb466899988fd8181c29a8', N'1292621494837116928', N'【平台服务】- 文件系统 - 复制文件', N'/api/file-management/file-system/files/copy', N'', N'', N'/api/file-management/file-system/files/copy', N'PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'119', N'{}', N'9560caaa3bd9424984c44724aa54bfe9', N'1292621629260365824', N'【平台服务】- 文件系统 - 移动文件', N'/api/file-management/file-system/files/move', N'', N'', N'/api/file-management/file-system/files/move', N'PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'120', N'{}', N'fc2aaa6035484201b9014912930fb7cb', N'1292622526073864192', N'【平台服务】- 文件系统 - 详情页', N'/api/file-management/file-system/profile', N'', N'', N'/api/file-management/file-system/profile', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30025,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'121', N'{}', N'c6c7b027000942dda8ba0d2e2d8cf705', N'1293470838745821184', N'【后台管理】- 框架配置', N'/api/abp/application-configuration', N'', N'', N'/api/abp/backend-admin/application-configuration', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'backend-admin-configuration', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'122', N'{}', N'becd4342079d4399abda5b5ba3b46fdc', N'1293471661785706496', N'【消息服务】- 框架配置', N'/api/abp/application-configuration', N'', N'', N'/api/abp/messages/application-configuration', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'messages-configuration', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'123', N'{}', N'c828140cee3043c18ffc274f6461f0f2', N'1293472678392721408', N'【后台管理】- 接口代理', N'/api/abp/api-definition', N'', N'', N'/api/abp/backend-admin/api-definition', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'backend-admin-api-definition', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'124', N'{}', N'e683cff8066d4c2899a17d0f618f1a0b', N'1293472857510473728', N'【消息服务】- 接口代理', N'/api/abp/api-definition', N'', N'', N'/api/abp/messages/api-definition', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'messages-api-definition', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'125', N'{}', N'0e9c3bff5b58428eba97a5516140ba5e', N'1299273336009359360', N'【消息服务】- Hangfire仪表板 ', N'/hangfire', N'', N'', N'/hangfire', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'126', N'{}', N'e906924ad3a947cf8e6956e2dd258192', N'1299273436282585088', N'【消息服务】- Hangfire仪表板 - 主页', N'/hangfire/', N'', N'', N'/hangfire/', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'127', N'{}', N'e02f2049efbc4ee1ad6629bd0341ed2b', N'1299273618470567936', N'【消息服务】- Hangfire仪表板 - 状态', N'/hangfire/stats', N'', N'', N'/hangfire/stats', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'128', N'{}', N'f8d2b2f0f1d649c2a07eeef23d6adb0e', N'1299273770182737920', N'【消息服务】- Hangfire仪表板 - 作业管理', N'/hangfire/jobs/{everything}', N'', N'', N'/hangfire/jobs/{everything}', N'GET,POST,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'129', N'{}', N'9785be7a29774b468e271b23009fe115', N'1299273978023084032', N'【消息服务】- Hangfire仪表板 - 重试', N'/hangfire/retries', N'', N'', N'/hangfire/retries', N'GET,POST,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'130', N'{}', N'9c0c1cd196bb45c0bc03fafb7a1eb8f2', N'1299274123225694208', N'【消息服务】- Hangfire仪表板 - 周期性作业', N'/hangfire/recurring', N'', N'', N'/hangfire/recurring', N'GET,POST,DELETE,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'131', N'{}', N'243bafe828be463ea63a3e2b521f9923', N'1299274222299348992', N'【消息服务】- Hangfire仪表板 - 服务器列表', N'/hangfire/servers', N'', N'', N'/hangfire/servers', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'132', N'{}', N'57a8ac1b41bb434cad38fbde0e2ba2f0', N'1304238876758495232', N'【后台管理】- 管理功能', N'/api/feature-management/features', N'', N'', N'/api/feature-management/features', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'133', N'{}', N'40a150f629b047f587c91a9436a699c0', N'1304678610343383040', N'【身份认证服务】- 接口代理', N'/api/abp/api-definition', N'', N'', N'/api/abp/identity-server/api-definition', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'identity-server-api-definition', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'134', N'{}', N'3a2d5d538fa44ac690402fc5c4e1a401', N'1304679169305694208', N'【身份认证服务】- 框架配置', N'/api/abp/application-configuration', N'', N'', N'/api/abp/identity-server/application-configuration', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'identity-server-configuration', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'135', N'{}', N'2ecfe7483bc94c28ad0769b654eb765d', N'1310460417141817344', N'【后台管理】- 审计日志列表', N'/api/auditing/audit-log', N'', N'', N'/api/auditing/audit-log', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'136', N'{}', N'744e340c0024462d88458b7ea9605b3c', N'1310502391475519488', N'【后台服务】- 安全日志列表', N'/api/auditing/security-log', N'', N'', N'/api/auditing/security-log', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'137', N'{}', N'a99639f4172547c4ba9b4f4ca5cb4ab9', N'1310515546943569920', N'【后台服务】- 安全日志', N'/api/auditing/security-log/{id}', N'', N'', N'/api/auditing/security-log/{id}', N'DELETE,GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'138', N'{}', N'c3ebc82d55f640fb9d70a911e97e4ec1', N'1310515735292985344', N'【后台管理】- 审计日志', N'/api/auditing/audit-log/{id}', N'', N'', N'/api/auditing/audit-log/{id}', N'DELETE,GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'139', N'{}', N'0379fcb3a9cd4b13b562b3b5b5c3eb7d', N'1316628769783480320', N'【身份认证服务】- 声明类型', N'/api/identity/claim-types', N'', N'', N'/api/identity/claim-types', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'140', N'{}', N'de25c9a80d994f728b37eb483b2f5127', N'1316628940663619584', N'【身份认证服务】- 管理声明类型', N'/api/identity/claim-types/{id}', N'', N'', N'/api/identity/claim-types/{id}', N'GET,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'141', N'{}', N'25c19106baff4cf3a877ae8cd690a1b5', N'1316629112428756992', N'【身份认证服务】- 查询在用的声明类型列表', N'/api/identity/claim-types/actived-list', N'', N'', N'/api/identity/claim-types/actived-list', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'142', N'{}', N'd42f8b779cf344eeaa24df0ae37fb7cf', N'1316652047017246720', N'【身份认证服务】- 管理用户声明', N'/api/identity/users/claims/{id}', N'', N'', N'/api/identity/users/claims/{id}', N'POST,PUT,DELETE,GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'143', N'{}', N'b86af44a34a14db4b482df8550f1bde1', N'1316913899996737536', N'【身份认证管理】- 管理角色声明', N'/api/identity/roles/claims/{id}', N'', N'', N'/api/identity/roles/claims/{id}', N'GET,POST,PUT,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'144', N'{}', N'51a14bc295044de985ae014fbcc5bddf', N'1319200951383199744', N'【IdentityServer4】- 发现端点', N'/.well-known/openid-configuration', N'', N'', N'/.well-known/openid-configuration', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:44385,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'145', N'{}', N'9d859a444d774e93818237e53b6cc102', N'1319221929807024128', N'【身份认证服务】- 查询所有组织机构', N'/api/identity/organization-units/all', N'', N'', N'/api/identity/organization-units/all', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'146', N'{}', N'89f42175b24540caba2a1fded145acf8', N'1319554431134306304', N'【身份认证服务】- 管理组织机构用户', N'/api/identity/organization-units/{id}/users', N'', N'', N'/api/identity/organization-units/{id}/users', N'POST,GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'147', N'{}', N'126d82509cec43eda712e94737b01039', N'1319554550458060800', N'【身份认证服务】- 管理组织机构角色', N'/api/identity/organization-units/{id}/roles', N'', N'', N'/api/identity/organization-units/{id}/roles', N'POST,GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'148', N'{}', N'824f5eee6877489f96f1022e306c968a', N'1319554948434595840', N'【身份认证服务】- 管理角色组织机构', N'/api/identity/roles/{id}/organization-units', N'', N'', N'/api/identity/roles/{id}/organization-units', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'149', N'{}', N'fe1379d4a13f41afb6410f4c948871f3', N'1319555067183730688', N'【身份认证服务】- 删除角色组织机构', N'/api/identity/roles/{id}/organization-units/{ouId}', N'', N'', N'/api/identity/roles/{id}/organization-units/{ouId}', N'DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'150', N'{}', N'197a69bb723346aba3601bd61e7fa655', N'1319555230765780992', N'【身份认证服务】- 管理用户组织机构', N'/api/identity/users/{id}/organization-units', N'', N'', N'/api/identity/users/{id}/organization-units', N'GET,PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'151', N'{}', N'1a7e6d0b1c95484f82a75a2ce6e6f453', N'1319555333790470144', N'【身份认证服务】- 删除用户组织机构', N'/api/identity/users/{id}/organization-units/{ouId}', N'', N'', N'/api/identity/users/{id}/organization-units/{ouId}', N'DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30015,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'152', N'{}', N'ecfa9bbd19694097b33e691b653f2124', N'1321001932510203904', N'【消息服务】- 我的消息', N'/api/im/chat/my-messages', N'', N'', N'/api/im/chat/my-messages', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'153', N'{}', N'4867ad188ca54acb8b961d20297b6545', N'1321002059803136000', N'【消息服务】- 我的最近消息', N'/api/im/chat/my-last-messages', N'', N'', N'/api/im/chat/my-last-messages', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'154', N'{}', N'291ab802d7bc4af98fc15c509f98fa75', N'1321002256440496128', N'【消息服务】- 我的朋友', N'/api/im/my-friends', N'', N'', N'/api/im/my-friends', N'GET,POST,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'155', N'{}', N'08438dabb1e849988e0c304f82b08a10', N'1321002350686507008', N'【消息服务】- 我的所有朋友', N'/api/im/my-friends/all', N'', N'', N'/api/im/my-friends/all', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'156', N'{}', N'cecf632785b7402299764698369c751f', N'1322190027988525056', N'【消息服务】- 发送好友请求', N'/api/im/my-friends/add-request', N'', N'', N'/api/im/my-friends/add-request', N'POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'157', N'{}', N'91b088ab3e164116b8c4a2b6109e37e9', N'1322452079688458240', N'【消息服务】- 我的订阅', N'/api/my-subscribes', N'', N'', N'/api/my-subscribes', N'GET,POST,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'158', N'{}', N'b9f57600634b40c087ac0730926895e2', N'1322452183929495552', N'【消息服务】- 我的订阅列表', N'/api/my-subscribes/all', N'', N'', N'/api/my-subscribes/all', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'my-subscribes', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'159', N'{}', N'8e6a0c6759df42e29b9abd4d833646a3', N'1322452308651319296', N'【消息服务】- 是否已订阅', N'/api/my-subscribes/is-subscribed/{Name}', N'', N'', N'/api/my-subscribes/is-subscribed/{Name}', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'160', N'{}', N'6b747d0acfee478ea64241b7ea519861', N'1322452858176446464', N'【消息服务】- 我的通知', N'/api/my-notifilers', N'', N'', N'/api/my-notifilers', N'GET,POST,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'161', N'{}', N'25a64613f37f44cf8efff8d0cf6cd0ca', N'1322452989235863552', N'【消息服务】- 管理我的通知', N'/api/my-notifilers/{id}', N'', N'', N'/api/my-notifilers/{id}', N'GET,DELETE,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'162', N'{}', N'ddc7f13aaa2741b28c2102fbff18d836', N'1322453089655889920', N'【消息服务】- 可用通知列表', N'/api/my-notifilers/assignables', N'', N'', N'/api/my-notifilers/assignables', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30020,', N'', N'', N'assignables-notifilers', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'163', N'{}', N'1d586107d7e240b3bfc14c8ca04baea8', N'1329706860249804800', N'【微信管理】- 微信公共配置', N'/api/setting-management/wechat/by-global', N'', N'', N'/api/setting-management/wechat/by-global', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'wechat-setting-global', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'164', N'{}', N'bd9b34dd564f405bb3a063d6a719ce6e', N'1329707002411544576', N'【微信管理】- 微信租户配置', N'/api/setting-management/wechat/by-current-tenant', N'', N'', N'/api/setting-management/wechat/by-current-tenant', N'GET,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'wechat-setting-current-tenant', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'165', N'{}', N'e9847659244b47dc80101b1c3f4edb31', N'1329708512277098496', N'【后台管理】- 变更全局设置', N'/api/setting-management/settings/change-global', N'', N'', N'/api/setting-management/settings/change-global', N'PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP'), (N'166', N'{}', N'94c3692dea394b39ac0cc19f60fc1964', N'1329708625917571072', N'【后台管理】- 变更当前租户设置', N'/api/setting-management/settings/change-current-tenant', N'', N'', N'/api/setting-management/settings/change-current-tenant', N'PUT,', N'', N'', N'', N'', N'', N'', N'', N'1', N'', N'', N'HTTP', N'127.0.0.1:30010,', N'', N'', N'', N'0', N'30000', N'1', N'', N'TEST-APP')
GO
COMMIT
@@ -556,7 +556,7 @@ GO
BEGIN TRANSACTION
GO
-INSERT INTO [apigateway].[appapigatewaysecurityoptions] VALUES (N'3', N'1261299170387169280', N'', N''), (N'4', N'1261585859064872960', N'', N''), (N'5', N'1261586605810368512', N'', N''), (N'6', N'1261587558609436672', N'', N''), (N'7', N'1261588213298348032', N'', N''), (N'8', N'1261588367619375104', N'', N''), (N'9', N'1261588628450557952', N'', N''), (N'10', N'1261588881564221440', N'', N''), (N'11', N'1261588983053795328', N'', N''), (N'12', N'1261589139039961088', N'', N''), (N'13', N'1261589197483393024', N'', N''), (N'14', N'1261589278857084928', N'', N''), (N'15', N'1261589420356124672', N'', N''), (N'16', N'1261589960393736192', N'', N''), (N'17', N'1261606600242085888', N'', N''), (N'18', N'1261606689601732608', N'', N''), (N'21', N'1262220447629058048', N'', N''), (N'22', N'1262230734939758592', N'', N''), (N'23', N'1262296916350869504', N'', N''), (N'24', N'1262632376348594176', N'', N''), (N'25', N'1262632791869902848', N'', N''), (N'28', N'1262660336921235456', N'', N''), (N'29', N'1262660528277966848', N'', N''), (N'30', N'1262660706875625472', N'', N''), (N'31', N'1262660966393991168', N'', N''), (N'32', N'1262661109474283520', N'', N''), (N'33', N'1262663888804663296', N'', N''), (N'34', N'1262664024096133120', N'', N''), (N'35', N'1262664186252120064', N'', N''), (N'36', N'1262664357044178944', N'', N''), (N'37', N'1262664632928718848', N'', N''), (N'38', N'1262664751409418240', N'', N''), (N'39', N'1262664871274237952', N'', N''), (N'40', N'1262665026111164416', N'', N''), (N'41', N'1262665159905267712', N'', N''), (N'42', N'1262665329829105664', N'', N''), (N'43', N'1262665456471920640', N'', N''), (N'44', N'1262665628165754880', N'', N''), (N'45', N'1262666172682883072', N'', N''), (N'47', N'1262723402331885568', N'', N''), (N'48', N'1262935771746734080', N'', N''), (N'49', N'1262935906522304512', N'', N''), (N'52', N'1263074419073593344', N'', N''), (N'53', N'1263075249394790400', N'', N''), (N'54', N'1263075593499684864', N'', N''), (N'56', N'1263101898440146944', N'', N''), (N'57', N'1263303878648569856', N'', N''), (N'58', N'1263304204797648896', N'', N''), (N'59', N'1263304872891555840', N'', N''), (N'60', N'1263305106250047488', N'', N''), (N'61', N'1263305244594970624', N'', N''), (N'62', N'1263305430536855552', N'', N''), (N'63', N'1263639172959174656', N'', N''), (N'64', N'1264799968944640000', N'', N''), (N'65', N'1264800070161584128', N'', N''), (N'66', N'1267360794414161920', N'', N''), (N'67', N'1267383367629807616', N'', N''), (N'68', N'1267817055527632896', N'', N''), (N'69', N'1267817221286526976', N'', N''), (N'70', N'1268893687085518848', N'', N''), (N'94', N'1288657613998579712', N'', N''), (N'95', N'1288657941770854400', N'', N''), (N'96', N'1288658134067109888', N'', N''), (N'97', N'1288658305156964352', N'', N''), (N'98', N'1288658491216289792', N'', N''), (N'99', N'1288658638302142464', N'', N''), (N'100', N'1288658791784308736', N'', N''), (N'101', N'1290849478956199936', N'', N''), (N'102', N'1290849628051124224', N'', N''), (N'103', N'1290849798553776128', N'', N''), (N'105', N'1291259822512693248', N'', N''), (N'106', N'1292620505149145088', N'', N''), (N'107', N'1292620665505775616', N'', N''), (N'108', N'1292620843398791168', N'', N''), (N'109', N'1292621027574874112', N'', N''), (N'110', N'1292621363161137152', N'', N''), (N'111', N'1292621494837116928', N'', N''), (N'112', N'1292621629260365824', N'', N''), (N'113', N'1292622526073864192', N'', N''), (N'114', N'1293470838745821184', N'', N''), (N'115', N'1293471661785706496', N'', N''), (N'116', N'1293472678392721408', N'', N''), (N'117', N'1293472857510473728', N'', N''), (N'118', N'1299273336009359360', N'127.0.0.1', N''), (N'119', N'1299273436282585088', N'127.0.0.1', N''), (N'120', N'1299273618470567936', N'127.0.0.1', N''), (N'121', N'1299273770182737920', N'127.0.0.1', N''), (N'122', N'1299273978023084032', N'127.0.0.1', N''), (N'123', N'1299274123225694208', N'127.0.0.1', N''), (N'124', N'1299274222299348992', N'127.0.0.1', N''), (N'125', N'1304238876758495232', N'', N''), (N'126', N'1304678610343383040', N'', N''), (N'127', N'1304679169305694208', N'', N''), (N'128', N'1310460417141817344', N'', N''), (N'129', N'1310502391475519488', N'', N''), (N'130', N'1310515546943569920', N'', N''), (N'131', N'1310515735292985344', N'', N''), (N'132', N'1316628769783480320', N'', N''), (N'133', N'1316628940663619584', N'', N''), (N'134', N'1316629112428756992', N'', N''), (N'135', N'1316652047017246720', N'', N''), (N'136', N'1316913899996737536', N'', N''), (N'137', N'1319200951383199744', N'', N''), (N'138', N'1319221929807024128', N'', N''), (N'139', N'1319554431134306304', N'', N''), (N'140', N'1319554550458060800', N'', N''), (N'141', N'1319554948434595840', N'', N''), (N'142', N'1319555067183730688', N'', N''), (N'143', N'1319555230765780992', N'', N''), (N'144', N'1319555333790470144', N'', N''), (N'145', N'1321001932510203904', N'', N''), (N'146', N'1321002059803136000', N'', N''), (N'147', N'1321002256440496128', N'', N''), (N'148', N'1321002350686507008', N'', N''), (N'149', N'1322190027988525056', N'', N'')
+INSERT INTO [apigateway].[appapigatewaysecurityoptions] VALUES (N'3', N'1261299170387169280', N'', N''), (N'4', N'1261585859064872960', N'', N''), (N'5', N'1261586605810368512', N'', N''), (N'6', N'1261587558609436672', N'', N''), (N'7', N'1261588213298348032', N'', N''), (N'8', N'1261588367619375104', N'', N''), (N'9', N'1261588628450557952', N'', N''), (N'10', N'1261588881564221440', N'', N''), (N'11', N'1261588983053795328', N'', N''), (N'12', N'1261589139039961088', N'', N''), (N'13', N'1261589197483393024', N'', N''), (N'14', N'1261589278857084928', N'', N''), (N'15', N'1261589420356124672', N'', N''), (N'16', N'1261589960393736192', N'', N''), (N'17', N'1261606600242085888', N'', N''), (N'18', N'1261606689601732608', N'', N''), (N'21', N'1262220447629058048', N'', N''), (N'22', N'1262230734939758592', N'', N''), (N'23', N'1262296916350869504', N'', N''), (N'24', N'1262632376348594176', N'', N''), (N'25', N'1262632791869902848', N'', N''), (N'28', N'1262660336921235456', N'', N''), (N'29', N'1262660528277966848', N'', N''), (N'30', N'1262660706875625472', N'', N''), (N'31', N'1262660966393991168', N'', N''), (N'32', N'1262661109474283520', N'', N''), (N'33', N'1262663888804663296', N'', N''), (N'34', N'1262664024096133120', N'', N''), (N'35', N'1262664186252120064', N'', N''), (N'36', N'1262664357044178944', N'', N''), (N'37', N'1262664632928718848', N'', N''), (N'38', N'1262664751409418240', N'', N''), (N'39', N'1262664871274237952', N'', N''), (N'40', N'1262665026111164416', N'', N''), (N'41', N'1262665159905267712', N'', N''), (N'42', N'1262665329829105664', N'', N''), (N'43', N'1262665456471920640', N'', N''), (N'44', N'1262665628165754880', N'', N''), (N'45', N'1262666172682883072', N'', N''), (N'47', N'1262723402331885568', N'', N''), (N'48', N'1262935771746734080', N'', N''), (N'49', N'1262935906522304512', N'', N''), (N'52', N'1263074419073593344', N'', N''), (N'53', N'1263075249394790400', N'', N''), (N'54', N'1263075593499684864', N'', N''), (N'56', N'1263101898440146944', N'', N''), (N'57', N'1263303878648569856', N'', N''), (N'58', N'1263304204797648896', N'', N''), (N'59', N'1263304872891555840', N'', N''), (N'60', N'1263305106250047488', N'', N''), (N'61', N'1263305244594970624', N'', N''), (N'62', N'1263305430536855552', N'', N''), (N'63', N'1263639172959174656', N'', N''), (N'64', N'1264799968944640000', N'', N''), (N'65', N'1264800070161584128', N'', N''), (N'66', N'1267360794414161920', N'', N''), (N'67', N'1267383367629807616', N'', N''), (N'68', N'1267817055527632896', N'', N''), (N'69', N'1267817221286526976', N'', N''), (N'70', N'1268893687085518848', N'', N''), (N'94', N'1288657613998579712', N'', N''), (N'95', N'1288657941770854400', N'', N''), (N'96', N'1288658134067109888', N'', N''), (N'97', N'1288658305156964352', N'', N''), (N'98', N'1288658491216289792', N'', N''), (N'99', N'1288658638302142464', N'', N''), (N'100', N'1288658791784308736', N'', N''), (N'101', N'1290849478956199936', N'', N''), (N'102', N'1290849628051124224', N'', N''), (N'103', N'1290849798553776128', N'', N''), (N'105', N'1291259822512693248', N'', N''), (N'106', N'1292620505149145088', N'', N''), (N'107', N'1292620665505775616', N'', N''), (N'108', N'1292620843398791168', N'', N''), (N'109', N'1292621027574874112', N'', N''), (N'110', N'1292621363161137152', N'', N''), (N'111', N'1292621494837116928', N'', N''), (N'112', N'1292621629260365824', N'', N''), (N'113', N'1292622526073864192', N'', N''), (N'114', N'1293470838745821184', N'', N''), (N'115', N'1293471661785706496', N'', N''), (N'116', N'1293472678392721408', N'', N''), (N'117', N'1293472857510473728', N'', N''), (N'118', N'1299273336009359360', N'127.0.0.1', N''), (N'119', N'1299273436282585088', N'127.0.0.1', N''), (N'120', N'1299273618470567936', N'127.0.0.1', N''), (N'121', N'1299273770182737920', N'127.0.0.1', N''), (N'122', N'1299273978023084032', N'127.0.0.1', N''), (N'123', N'1299274123225694208', N'127.0.0.1', N''), (N'124', N'1299274222299348992', N'127.0.0.1', N''), (N'125', N'1304238876758495232', N'', N''), (N'126', N'1304678610343383040', N'', N''), (N'127', N'1304679169305694208', N'', N''), (N'128', N'1310460417141817344', N'', N''), (N'129', N'1310502391475519488', N'', N''), (N'130', N'1310515546943569920', N'', N''), (N'131', N'1310515735292985344', N'', N''), (N'132', N'1316628769783480320', N'', N''), (N'133', N'1316628940663619584', N'', N''), (N'134', N'1316629112428756992', N'', N''), (N'135', N'1316652047017246720', N'', N''), (N'136', N'1316913899996737536', N'', N''), (N'137', N'1319200951383199744', N'', N''), (N'138', N'1319221929807024128', N'', N''), (N'139', N'1319554431134306304', N'', N''), (N'140', N'1319554550458060800', N'', N''), (N'141', N'1319554948434595840', N'', N''), (N'142', N'1319555067183730688', N'', N''), (N'143', N'1319555230765780992', N'', N''), (N'144', N'1319555333790470144', N'', N''), (N'145', N'1321001932510203904', N'', N''), (N'146', N'1321002059803136000', N'', N''), (N'147', N'1321002256440496128', N'', N''), (N'148', N'1321002350686507008', N'', N''), (N'149', N'1322190027988525056', N'', N''), (N'150', N'1322452079688458240', N'', N''), (N'151', N'1322452183929495552', N'', N''), (N'152', N'1322452308651319296', N'', N''), (N'153', N'1322452858176446464', N'', N''), (N'154', N'1322452989235863552', N'', N''), (N'155', N'1322453089655889920', N'', N''), (N'156', N'1329706860249804800', N'', N''), (N'157', N'1329707002411544576', N'', N''), (N'158', N'1329708512277098496', N'', N''), (N'159', N'1329708625917571072', N'', N'')
GO
COMMIT
@@ -589,7 +589,7 @@ GO
BEGIN TRANSACTION
GO
-INSERT INTO [apigateway].[cap.published] VALUES (N'1322190029573971968', N'v1', N'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', N'{"Headers":{"cap-callback-name":null,"cap-msg-id":"1322190029573971968","cap-msg-name":"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData","cap-msg-type":"Object","cap-senttime":"2020/10/30 22:54:02 +08:00","cap-corr-id":"1322190029573971968","cap-corr-seq":"0"},"Value":{"DateTime":"2020-10-30T22:54:02.8070185+08:00","AppId":"TEST-APP","Method":"Create","Object":"ReRoute"}}', N'0', N'2020-10-30 22:54:03', N'2020-10-31 22:54:03', N'Succeeded')
+INSERT INTO [apigateway].[cap.published] VALUES (N'1329706861734588416', N'v1', N'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', N'{"Headers":{"cap-callback-name":null,"cap-msg-id":"1329706861734588416","cap-msg-name":"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData","cap-msg-type":"Object","cap-senttime":"2020/11/20 16:43:15 +08:00","cap-corr-id":"1329706861734588416","cap-corr-seq":"0"},"Value":{"DateTime":"2020-11-20T16:43:15.2508199+08:00","AppId":"TEST-APP","Method":"Create","Object":"ReRoute"}}', N'0', N'2020-11-20 16:43:15', N'2020-11-21 16:43:15', N'Succeeded'), (N'1329707002549956608', N'v1', N'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', N'{"Headers":{"cap-callback-name":null,"cap-msg-id":"1329707002549956608","cap-msg-name":"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData","cap-msg-type":"Object","cap-senttime":"2020/11/20 16:43:48 +08:00","cap-corr-id":"1329707002549956608","cap-corr-seq":"0"},"Value":{"DateTime":"2020-11-20T16:43:48.825984+08:00","AppId":"TEST-APP","Method":"Create","Object":"ReRoute"}}', N'0', N'2020-11-20 16:43:49', N'2020-11-21 16:43:49', N'Succeeded'), (N'1329708211352563712', N'v1', N'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', N'{"Headers":{"cap-callback-name":null,"cap-msg-id":"1329708211352563712","cap-msg-name":"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData","cap-msg-type":"Object","cap-senttime":"2020/11/20 16:48:37 +08:00","cap-corr-id":"1329708211352563712","cap-corr-seq":"0"},"Value":{"DateTime":"2020-11-20T16:48:37.0273285+08:00","AppId":"TEST-APP","Method":"Modify","Object":"ReRoute"}}', N'0', N'2020-11-20 16:48:37', N'2020-11-21 16:48:37', N'Succeeded'), (N'1329708364180418560', N'v1', N'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', N'{"Headers":{"cap-callback-name":null,"cap-msg-id":"1329708364180418560","cap-msg-name":"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData","cap-msg-type":"Object","cap-senttime":"2020/11/20 16:49:13 +08:00","cap-corr-id":"1329708364180418560","cap-corr-seq":"0"},"Value":{"DateTime":"2020-11-20T16:49:13.4642334+08:00","AppId":"TEST-APP","Method":"Modify","Object":"ReRoute"}}', N'0', N'2020-11-20 16:49:13', N'2020-11-21 16:49:13', N'Succeeded'), (N'1329708512352595968', N'v1', N'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', N'{"Headers":{"cap-callback-name":null,"cap-msg-id":"1329708512352595968","cap-msg-name":"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData","cap-msg-type":"Object","cap-senttime":"2020/11/20 16:49:48 +08:00","cap-corr-id":"1329708512352595968","cap-corr-seq":"0"},"Value":{"DateTime":"2020-11-20T16:49:48.7915448+08:00","AppId":"TEST-APP","Method":"Create","Object":"ReRoute"}}', N'0', N'2020-11-20 16:49:49', N'2020-11-21 16:49:49', N'Succeeded'), (N'1329708626014040064', N'v1', N'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', N'{"Headers":{"cap-callback-name":null,"cap-msg-id":"1329708626014040064","cap-msg-name":"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData","cap-msg-type":"Object","cap-senttime":"2020/11/20 16:50:15 +08:00","cap-corr-id":"1329708626014040064","cap-corr-seq":"0"},"Value":{"DateTime":"2020-11-20T16:50:15.8881875+08:00","AppId":"TEST-APP","Method":"Create","Object":"ReRoute"}}', N'0', N'2020-11-20 16:50:16', N'2020-11-21 16:50:16', N'Succeeded'), (N'1329708867152965632', N'v1', N'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', N'{"Headers":{"cap-callback-name":null,"cap-msg-id":"1329708867152965632","cap-msg-name":"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData","cap-msg-type":"Object","cap-senttime":"2020/11/20 16:51:13 +08:00","cap-corr-id":"1329708867152965632","cap-corr-seq":"0"},"Value":{"DateTime":"2020-11-20T16:51:13.3820372+08:00","AppId":"TEST-APP","Method":"Create","Object":"AggregateRoute"}}', N'0', N'2020-11-20 16:51:13', N'2020-11-21 16:51:13', N'Succeeded'), (N'1329709265259524096', N'v1', N'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', N'{"Headers":{"cap-callback-name":null,"cap-msg-id":"1329709265259524096","cap-msg-name":"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData","cap-msg-type":"Object","cap-senttime":"2020/11/20 16:52:48 +08:00","cap-corr-id":"1329709265259524096","cap-corr-seq":"0"},"Value":{"DateTime":"2020-11-20T16:52:48.2979878+08:00","AppId":"TEST-APP","Method":"Create","Object":"AggregateRoute"}}', N'0', N'2020-11-20 16:52:48', N'2020-11-21 16:52:48', N'Succeeded')
GO
COMMIT
diff --git a/aspnet-core/database/ApiGateway-Init.sql b/aspnet-core/database/ApiGateway-Init.sql
index 2c56ac290..d0f4158d5 100644
--- a/aspnet-core/database/ApiGateway-Init.sql
+++ b/aspnet-core/database/ApiGateway-Init.sql
@@ -11,7 +11,7 @@
Target Server Version : 80020
File Encoding : 65001
- Date: 31/10/2020 11:28:59
+ Date: 20/11/2020 17:35:45
*/
SET NAMES utf8mb4;
@@ -54,13 +54,16 @@ CREATE TABLE `appapigatewayaggregate` (
`Priority` int(0) NULL DEFAULT NULL,
`UpstreamHttpMethod` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayaggregate
-- ----------------------------
INSERT INTO `appapigatewayaggregate` VALUES (5, '{}', 'db569f15577848568bee9616d6b8b53c', 'TEST-APP', 'abp接口代理服务', 1263083077348196352, 'platform-api-definition,backend-admin-api-definition,messages-api-definition,apigateway-api-definition,identity-server-api-definition,', '/api/abp/api-definition', '', 1, 'AbpApiDefinitionAggregator', NULL, '');
INSERT INTO `appapigatewayaggregate` VALUES (6, '{}', '870a2c5df9b34f8c9514aef0250fbb47', 'TEST-APP', 'abp框架配置', 1263102116090970112, 'apigateway-configuration,platform-configuration,backend-admin-configuration,messages-configuration,identity-server-configuration,', '/api/abp/application-configuration', '', 1, 'AbpApiDefinitionAggregator', NULL, '');
+INSERT INTO `appapigatewayaggregate` VALUES (8, '{}', 'edc962f7e0844bb09cb0fb731f358b4b', 'TEST-APP', '我的消息订阅', 1322503807309881344, 'assignables-notifilers,my-subscribes,', '/api/my-subscribes/assignables-notifilers', '', 1, 'AbpApiDefinitionAggregator', NULL, '');
+INSERT INTO `appapigatewayaggregate` VALUES (9, '{}', 'dbfc4b5972034e8ba875551fa8dd29a1', 'TEST-APP', '全局设置', 1329708867127799808, 'setting-global,wechat-setting-global,', '/api/setting-management/settings/by-global', '', 1, 'AbpApiDefinitionAggregator', NULL, '');
+INSERT INTO `appapigatewayaggregate` VALUES (10, '{}', '2035b334da4b450eaa3f0c4c54998d8b', 'TEST-APP', '当前租户设置', 1329709265255329792, 'setting-current-tenant,wechat-setting-current-tenant,', '/api/setting-management/settings/by-current-tenant', '', 1, 'AbpApiDefinitionAggregator', NULL, '');
-- ----------------------------
-- Table structure for appapigatewayaggregateconfig
@@ -76,7 +79,7 @@ CREATE TABLE `appapigatewayaggregateconfig` (
PRIMARY KEY (`Id`) USING BTREE,
INDEX `IX_AppApiGatewayAggregateConfig_AggregateReRouteId`(`AggregateReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayAggregateConfig_AppApiGatewayAggregate_Aggregat~` FOREIGN KEY (`AggregateReRouteId`) REFERENCES `appapigatewayaggregate` (`Id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for appapigatewayauthoptions
@@ -90,7 +93,7 @@ CREATE TABLE `appapigatewayauthoptions` (
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewayAuthOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayAuthOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 149 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 160 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayauthoptions
@@ -210,6 +213,16 @@ INSERT INTO `appapigatewayauthoptions` VALUES (146, 1321002059803136000, '', '')
INSERT INTO `appapigatewayauthoptions` VALUES (147, 1321002256440496128, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (148, 1321002350686507008, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (149, 1322190027988525056, '', '');
+INSERT INTO `appapigatewayauthoptions` VALUES (150, 1322452079688458240, '', '');
+INSERT INTO `appapigatewayauthoptions` VALUES (151, 1322452183929495552, '', '');
+INSERT INTO `appapigatewayauthoptions` VALUES (152, 1322452308651319296, '', '');
+INSERT INTO `appapigatewayauthoptions` VALUES (153, 1322452858176446464, '', '');
+INSERT INTO `appapigatewayauthoptions` VALUES (154, 1322452989235863552, '', '');
+INSERT INTO `appapigatewayauthoptions` VALUES (155, 1322453089655889920, '', '');
+INSERT INTO `appapigatewayauthoptions` VALUES (156, 1329706860249804800, '', '');
+INSERT INTO `appapigatewayauthoptions` VALUES (157, 1329707002411544576, '', '');
+INSERT INTO `appapigatewayauthoptions` VALUES (158, 1329708512277098496, '', '');
+INSERT INTO `appapigatewayauthoptions` VALUES (159, 1329708625917571072, '', '');
-- ----------------------------
-- Table structure for appapigatewaybalanceroptions
@@ -227,7 +240,7 @@ CREATE TABLE `appapigatewaybalanceroptions` (
UNIQUE INDEX `IX_AppApiGatewayBalancerOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayBalancerOptions_AppApiGatewayGlobalConfiguratio~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `FK_AppApiGatewayBalancerOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 152 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 163 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewaybalanceroptions
@@ -348,6 +361,16 @@ INSERT INTO `appapigatewaybalanceroptions` VALUES (149, NULL, 132100205980313600
INSERT INTO `appapigatewaybalanceroptions` VALUES (150, NULL, 1321002256440496128, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (151, NULL, 1321002350686507008, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (152, NULL, 1322190027988525056, '', '', 0);
+INSERT INTO `appapigatewaybalanceroptions` VALUES (153, NULL, 1322452079688458240, '', '', 0);
+INSERT INTO `appapigatewaybalanceroptions` VALUES (154, NULL, 1322452183929495552, '', '', 0);
+INSERT INTO `appapigatewaybalanceroptions` VALUES (155, NULL, 1322452308651319296, '', '', 0);
+INSERT INTO `appapigatewaybalanceroptions` VALUES (156, NULL, 1322452858176446464, '', '', 0);
+INSERT INTO `appapigatewaybalanceroptions` VALUES (157, NULL, 1322452989235863552, '', '', 0);
+INSERT INTO `appapigatewaybalanceroptions` VALUES (158, NULL, 1322453089655889920, '', '', 0);
+INSERT INTO `appapigatewaybalanceroptions` VALUES (159, NULL, 1329706860249804800, '', '', 0);
+INSERT INTO `appapigatewaybalanceroptions` VALUES (160, NULL, 1329707002411544576, '', '', 0);
+INSERT INTO `appapigatewaybalanceroptions` VALUES (161, NULL, 1329708512277098496, '', '', 0);
+INSERT INTO `appapigatewaybalanceroptions` VALUES (162, NULL, 1329708625917571072, '', '', 0);
-- ----------------------------
-- Table structure for appapigatewaycacheoptions
@@ -361,7 +384,7 @@ CREATE TABLE `appapigatewaycacheoptions` (
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewayCacheOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayCacheOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 149 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 160 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewaycacheoptions
@@ -481,6 +504,16 @@ INSERT INTO `appapigatewaycacheoptions` VALUES (146, 1321002059803136000, 0, '')
INSERT INTO `appapigatewaycacheoptions` VALUES (147, 1321002256440496128, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (148, 1321002350686507008, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (149, 1322190027988525056, 0, '');
+INSERT INTO `appapigatewaycacheoptions` VALUES (150, 1322452079688458240, NULL, NULL);
+INSERT INTO `appapigatewaycacheoptions` VALUES (151, 1322452183929495552, NULL, NULL);
+INSERT INTO `appapigatewaycacheoptions` VALUES (152, 1322452308651319296, NULL, NULL);
+INSERT INTO `appapigatewaycacheoptions` VALUES (153, 1322452858176446464, 0, '');
+INSERT INTO `appapigatewaycacheoptions` VALUES (154, 1322452989235863552, 0, '');
+INSERT INTO `appapigatewaycacheoptions` VALUES (155, 1322453089655889920, NULL, NULL);
+INSERT INTO `appapigatewaycacheoptions` VALUES (156, 1329706860249804800, 0, '');
+INSERT INTO `appapigatewaycacheoptions` VALUES (157, 1329707002411544576, 0, '');
+INSERT INTO `appapigatewaycacheoptions` VALUES (158, 1329708512277098496, 0, '');
+INSERT INTO `appapigatewaycacheoptions` VALUES (159, 1329708625917571072, 0, '');
-- ----------------------------
-- Table structure for appapigatewaydiscovery
@@ -500,7 +533,7 @@ CREATE TABLE `appapigatewaydiscovery` (
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewayDiscovery_ItemId`(`ItemId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayDiscovery_AppApiGatewayGlobalConfiguration_Item~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewaydiscovery
@@ -521,7 +554,7 @@ CREATE TABLE `appapigatewaydynamicreroute` (
`AppId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `AK_AppApiGatewayDynamicReRoute_DynamicReRouteId`(`DynamicReRouteId`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for appapigatewayglobalconfiguration
@@ -541,7 +574,7 @@ CREATE TABLE `appapigatewayglobalconfiguration` (
`AppId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `AK_AppApiGatewayGlobalConfiguration_ItemId`(`ItemId`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayglobalconfiguration
@@ -590,7 +623,7 @@ CREATE TABLE `appapigatewayhttpoptions` (
UNIQUE INDEX `IX_AppApiGatewayHttpOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayHttpOptions_AppApiGatewayGlobalConfiguration_It~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `FK_AppApiGatewayHttpOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 152 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 163 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayhttpoptions
@@ -711,6 +744,16 @@ INSERT INTO `appapigatewayhttpoptions` VALUES (149, NULL, 1321002059803136000, 0
INSERT INTO `appapigatewayhttpoptions` VALUES (150, NULL, 1321002256440496128, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (151, NULL, 1321002350686507008, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (152, NULL, 1322190027988525056, 0, 0, 0, 0, 0);
+INSERT INTO `appapigatewayhttpoptions` VALUES (153, NULL, 1322452079688458240, 0, 0, 0, 0, 0);
+INSERT INTO `appapigatewayhttpoptions` VALUES (154, NULL, 1322452183929495552, 0, 0, 0, 0, 0);
+INSERT INTO `appapigatewayhttpoptions` VALUES (155, NULL, 1322452308651319296, 0, 0, 0, 0, 0);
+INSERT INTO `appapigatewayhttpoptions` VALUES (156, NULL, 1322452858176446464, 0, 0, 0, 0, 0);
+INSERT INTO `appapigatewayhttpoptions` VALUES (157, NULL, 1322452989235863552, 0, 0, 0, 0, 0);
+INSERT INTO `appapigatewayhttpoptions` VALUES (158, NULL, 1322453089655889920, 0, 0, 0, 0, 0);
+INSERT INTO `appapigatewayhttpoptions` VALUES (159, NULL, 1329706860249804800, 0, 0, 0, 0, 0);
+INSERT INTO `appapigatewayhttpoptions` VALUES (160, NULL, 1329707002411544576, 0, 0, 0, 0, 0);
+INSERT INTO `appapigatewayhttpoptions` VALUES (161, NULL, 1329708512277098496, 0, 0, 0, 0, 0);
+INSERT INTO `appapigatewayhttpoptions` VALUES (162, NULL, 1329708625917571072, 0, 0, 0, 0, 0);
-- ----------------------------
-- Table structure for appapigatewayqosoptions
@@ -728,7 +771,7 @@ CREATE TABLE `appapigatewayqosoptions` (
UNIQUE INDEX `IX_AppApiGatewayQoSOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayQoSOptions_AppApiGatewayGlobalConfiguration_Ite~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `FK_AppApiGatewayQoSOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 152 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 163 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayqosoptions
@@ -849,6 +892,16 @@ INSERT INTO `appapigatewayqosoptions` VALUES (149, NULL, 1321002059803136000, 50
INSERT INTO `appapigatewayqosoptions` VALUES (150, NULL, 1321002256440496128, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (151, NULL, 1321002350686507008, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (152, NULL, 1322190027988525056, 50, 60000, 30000);
+INSERT INTO `appapigatewayqosoptions` VALUES (153, NULL, 1322452079688458240, 50, 60000, 30000);
+INSERT INTO `appapigatewayqosoptions` VALUES (154, NULL, 1322452183929495552, 50, 60000, 30000);
+INSERT INTO `appapigatewayqosoptions` VALUES (155, NULL, 1322452308651319296, 50, 60000, 30000);
+INSERT INTO `appapigatewayqosoptions` VALUES (156, NULL, 1322452858176446464, 50, 60000, 30000);
+INSERT INTO `appapigatewayqosoptions` VALUES (157, NULL, 1322452989235863552, 50, 60000, 30000);
+INSERT INTO `appapigatewayqosoptions` VALUES (158, NULL, 1322453089655889920, 50, 60000, 30000);
+INSERT INTO `appapigatewayqosoptions` VALUES (159, NULL, 1329706860249804800, 50, 60000, 30000);
+INSERT INTO `appapigatewayqosoptions` VALUES (160, NULL, 1329707002411544576, 50, 60000, 30000);
+INSERT INTO `appapigatewayqosoptions` VALUES (161, NULL, 1329708512277098496, 50, 60000, 30000);
+INSERT INTO `appapigatewayqosoptions` VALUES (162, NULL, 1329708625917571072, 50, 60000, 30000);
-- ----------------------------
-- Table structure for appapigatewayratelimitoptions
@@ -865,7 +918,7 @@ CREATE TABLE `appapigatewayratelimitoptions` (
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewayRateLimitOptions_ItemId`(`ItemId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayRateLimitOptions_AppApiGatewayGlobalConfigurati~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayratelimitoptions
@@ -890,7 +943,7 @@ CREATE TABLE `appapigatewayratelimitrule` (
UNIQUE INDEX `IX_AppApiGatewayRateLimitRule_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayRateLimitRule_AppApiGatewayDynamicReRoute_Dynam~` FOREIGN KEY (`DynamicReRouteId`) REFERENCES `appapigatewaydynamicreroute` (`DynamicReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `FK_AppApiGatewayRateLimitRule_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 149 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 160 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayratelimitrule
@@ -1010,6 +1063,16 @@ INSERT INTO `appapigatewayratelimitrule` VALUES (146, 1321002059803136000, NULL,
INSERT INTO `appapigatewayratelimitrule` VALUES (147, 1321002256440496128, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (148, 1321002350686507008, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (149, 1322190027988525056, NULL, '', 0, NULL, NULL, NULL);
+INSERT INTO `appapigatewayratelimitrule` VALUES (150, 1322452079688458240, NULL, '', 0, NULL, NULL, NULL);
+INSERT INTO `appapigatewayratelimitrule` VALUES (151, 1322452183929495552, NULL, '', 0, NULL, NULL, NULL);
+INSERT INTO `appapigatewayratelimitrule` VALUES (152, 1322452308651319296, NULL, '', 0, NULL, NULL, NULL);
+INSERT INTO `appapigatewayratelimitrule` VALUES (153, 1322452858176446464, NULL, '', 0, NULL, NULL, NULL);
+INSERT INTO `appapigatewayratelimitrule` VALUES (154, 1322452989235863552, NULL, '', 0, NULL, NULL, NULL);
+INSERT INTO `appapigatewayratelimitrule` VALUES (155, 1322453089655889920, NULL, '', 0, NULL, NULL, NULL);
+INSERT INTO `appapigatewayratelimitrule` VALUES (156, 1329706860249804800, NULL, '', 0, NULL, NULL, NULL);
+INSERT INTO `appapigatewayratelimitrule` VALUES (157, 1329707002411544576, NULL, '', 0, NULL, NULL, NULL);
+INSERT INTO `appapigatewayratelimitrule` VALUES (158, 1329708512277098496, NULL, '', 0, NULL, NULL, NULL);
+INSERT INTO `appapigatewayratelimitrule` VALUES (159, 1329708625917571072, NULL, '', 0, NULL, NULL, NULL);
-- ----------------------------
-- Table structure for appapigatewayreroute
@@ -1049,7 +1112,7 @@ CREATE TABLE `appapigatewayreroute` (
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `AK_AppApiGatewayReRoute_ReRouteId`(`ReRouteId`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewayReRoute_AppId_DownstreamPathTemplate_UpstreamPa~`(`AppId`, `DownstreamPathTemplate`, `UpstreamPathTemplate`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 156 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 167 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayreroute
@@ -1106,7 +1169,7 @@ INSERT INTO `appapigatewayreroute` VALUES (62, '{}', '530ab314560f41678b40f48da9
INSERT INTO `appapigatewayreroute` VALUES (63, '{}', '21334c6da4c349cc883c38c13de0e754', 1263305106250047488, '【后台管理】- 特定租户管理', '/api/tenant-management/tenants/{id}', '', '', '/api/tenant-management/tenants/{id}', 'GET,PUT,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (64, '{}', 'cc8fdf1b2d0b414ebf2dc51a6dc78305', 1263305244594970624, '【后台管理】- 租户连接字符串', '/api/tenant-management/tenants/{id}/connection-string', '', '', '/api/tenant-management/tenants/{id}/concatenation', 'GET,PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 2, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (65, '{}', 'aaf285ed10da4024ba561d5cf8c6322b', 1263305430536855552, '【后台管理】- 特定租户连接字符串', '/api/tenant-management/tenants/{id}/connection-string/{name}', '', '', '/api/tenant-management/tenants/{id}/concatenation/{name}', 'GET,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 1, 30000, 1, '', 'TEST-APP');
-INSERT INTO `appapigatewayreroute` VALUES (66, '{}', 'b6ec80673b354c239def3bdce31b4cc0', 1263639172959174656, '【后台管理】- 全局设置', '/api/setting-management/settings/by-global', '', '', '/api/setting-management/settings/by-global', 'GET,PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
+INSERT INTO `appapigatewayreroute` VALUES (66, '{}', '6a7da198f4c84d94969a437adc47642b', 1263639172959174656, '【后台管理】- 全局设置', '/api/setting-management/settings/by-global', '', '', '/api/setting-management/settings/by-global/app', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', 'setting-global', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (67, '{}', '755b4dce5c34444785fa3b647fef4131', 1264799968944640000, '【身份认证服务】- 验证手机号', '/api/account/phone/verify', '', '', '/api/account/phone/verify', 'POST,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (68, '{}', '535191c570ae453ab320012304d7a62c', 1264800070161584128, '【身份认证服务】- 手机号注册', '/api/account/phone/register', '', '', '/api/account/phone/register', 'POST,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (69, '{}', '723c9b111f9f4a1aa804118cdde193d3', 1267360794414161920, '【消息服务】- 通知', '/signalr-hubs/notifications/{everything}', '', '', '/signalr-hubs/notifications/{everything}', 'POST,GET,OPTIONS,PUT,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'ws', '127.0.0.1:30020,', '', '', '', 1, 30000, 1, '', 'TEST-APP');
@@ -1121,7 +1184,7 @@ INSERT INTO `appapigatewayreroute` VALUES (104, '{}', '3515e75becf9447492ad60466
INSERT INTO `appapigatewayreroute` VALUES (105, '{}', 'aab0a24d930f4f9687497e5ccaac2a31', 1288658491216289792, '【身份认证服务】- 查询组织机构最后一个子节点', '/api/identity/organization-units/last-children', '', '', '/api/identity/organization-units/last-children', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (106, '{}', '9b7c999b1c5140c497bc15914a815401', 1288658638302142464, '【身份认证服务】- 未加入组织机构角色', '/api/identity/organization-units/{id}/unadded-roles', '', '', '/api/identity/organization-units/{id}/unadded-roles', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (107, '{}', 'b0cdb3f6908e42bd934ca99a78f22c3f', 1288658791784308736, '【身份认证服务】- 未加入组织机构用户', '/api/identity/organization-units/{id}/unadded-users', '', '', '/api/identity/organization-units/{id}/unadded-users', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
-INSERT INTO `appapigatewayreroute` VALUES (108, '{}', '1982bc6ffd92445b9b3f47067378d1fc', 1290849478956199936, '【后台管理】- 当前租户设置', '/api/setting-management/settings/by-current-tenant', '', '', '/api/setting-management/settings/by-current-tenant', 'GET,PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
+INSERT INTO `appapigatewayreroute` VALUES (108, '{}', '9362040d10a94fb991f60bc391efcb85', 1290849478956199936, '【后台管理】- 当前租户设置', '/api/setting-management/settings/by-current-tenant', '', '', '/api/setting-management/settings/by-current-tenant/app', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', 'setting-current-tenant', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (109, '{}', 'a7df3a04805d4cc8a6e6b3823c6dd468', 1290849628051124224, '【后台管理】- 用户设置', '/api/setting-management/settings/by-user/{userId}', '', '', '/api/setting-management/settings/by-user/{userId}', 'GET,PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (110, '{}', 'ef6e38a529a345fab67f6a627cf20635', 1290849798553776128, '【后台管理】- 当前用户设置', '/api/setting-management/settings/by-current-user', '', '', '/api/setting-management/settings/by-current-user', 'GET,PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (112, '{}', '9844fed6507844f2ac64bd08649bd3a6', 1291259822512693248, '【身份认证服务】- 查询组织机构根节点', '/api/identity/organization-units/root-node', '', '', '/api/identity/organization-units/root-node', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
@@ -1169,6 +1232,16 @@ INSERT INTO `appapigatewayreroute` VALUES (153, '{}', '4867ad188ca54acb8b961d202
INSERT INTO `appapigatewayreroute` VALUES (154, '{}', '291ab802d7bc4af98fc15c509f98fa75', 1321002256440496128, '【消息服务】- 我的朋友', '/api/im/my-friends', '', '', '/api/im/my-friends', 'GET,POST,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (155, '{}', '08438dabb1e849988e0c304f82b08a10', 1321002350686507008, '【消息服务】- 我的所有朋友', '/api/im/my-friends/all', '', '', '/api/im/my-friends/all', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (156, '{}', 'cecf632785b7402299764698369c751f', 1322190027988525056, '【消息服务】- 发送好友请求', '/api/im/my-friends/add-request', '', '', '/api/im/my-friends/add-request', 'POST,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
+INSERT INTO `appapigatewayreroute` VALUES (157, '{}', '91b088ab3e164116b8c4a2b6109e37e9', 1322452079688458240, '【消息服务】- 我的订阅', '/api/my-subscribes', '', '', '/api/my-subscribes', 'GET,POST,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
+INSERT INTO `appapigatewayreroute` VALUES (158, '{}', 'b9f57600634b40c087ac0730926895e2', 1322452183929495552, '【消息服务】- 我的订阅列表', '/api/my-subscribes/all', '', '', '/api/my-subscribes/all', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', 'my-subscribes', 0, 30000, 1, '', 'TEST-APP');
+INSERT INTO `appapigatewayreroute` VALUES (159, '{}', '8e6a0c6759df42e29b9abd4d833646a3', 1322452308651319296, '【消息服务】- 是否已订阅', '/api/my-subscribes/is-subscribed/{Name}', '', '', '/api/my-subscribes/is-subscribed/{Name}', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
+INSERT INTO `appapigatewayreroute` VALUES (160, '{}', '6b747d0acfee478ea64241b7ea519861', 1322452858176446464, '【消息服务】- 我的通知', '/api/my-notifilers', '', '', '/api/my-notifilers', 'GET,POST,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
+INSERT INTO `appapigatewayreroute` VALUES (161, '{}', '25a64613f37f44cf8efff8d0cf6cd0ca', 1322452989235863552, '【消息服务】- 管理我的通知', '/api/my-notifilers/{id}', '', '', '/api/my-notifilers/{id}', 'GET,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
+INSERT INTO `appapigatewayreroute` VALUES (162, '{}', 'ddc7f13aaa2741b28c2102fbff18d836', 1322453089655889920, '【消息服务】- 可用通知列表', '/api/my-notifilers/assignables', '', '', '/api/my-notifilers/assignables', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', 'assignables-notifilers', 0, 30000, 1, '', 'TEST-APP');
+INSERT INTO `appapigatewayreroute` VALUES (163, '{}', '1d586107d7e240b3bfc14c8ca04baea8', 1329706860249804800, '【微信管理】- 微信公共配置', '/api/setting-management/wechat/by-global', '', '', '/api/setting-management/wechat/by-global', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', 'wechat-setting-global', 0, 30000, 1, '', 'TEST-APP');
+INSERT INTO `appapigatewayreroute` VALUES (164, '{}', 'bd9b34dd564f405bb3a063d6a719ce6e', 1329707002411544576, '【微信管理】- 微信租户配置', '/api/setting-management/wechat/by-current-tenant', '', '', '/api/setting-management/wechat/by-current-tenant', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', 'wechat-setting-current-tenant', 0, 30000, 1, '', 'TEST-APP');
+INSERT INTO `appapigatewayreroute` VALUES (165, '{}', 'e9847659244b47dc80101b1c3f4edb31', 1329708512277098496, '【后台管理】- 变更全局设置', '/api/setting-management/settings/change-global', '', '', '/api/setting-management/settings/change-global', 'PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
+INSERT INTO `appapigatewayreroute` VALUES (166, '{}', '94c3692dea394b39ac0cc19f60fc1964', 1329708625917571072, '【后台管理】- 变更当前租户设置', '/api/setting-management/settings/change-current-tenant', '', '', '/api/setting-management/settings/change-current-tenant', 'PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30010,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
-- ----------------------------
-- Table structure for appapigatewayroutegroup
@@ -1212,7 +1285,7 @@ CREATE TABLE `appapigatewaysecurityoptions` (
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewaySecurityOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewaySecurityOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 149 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
+) ENGINE = InnoDB AUTO_INCREMENT = 160 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewaysecurityoptions
@@ -1332,6 +1405,16 @@ INSERT INTO `appapigatewaysecurityoptions` VALUES (146, 1321002059803136000, '',
INSERT INTO `appapigatewaysecurityoptions` VALUES (147, 1321002256440496128, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (148, 1321002350686507008, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (149, 1322190027988525056, '', '');
+INSERT INTO `appapigatewaysecurityoptions` VALUES (150, 1322452079688458240, '', '');
+INSERT INTO `appapigatewaysecurityoptions` VALUES (151, 1322452183929495552, '', '');
+INSERT INTO `appapigatewaysecurityoptions` VALUES (152, 1322452308651319296, '', '');
+INSERT INTO `appapigatewaysecurityoptions` VALUES (153, 1322452858176446464, '', '');
+INSERT INTO `appapigatewaysecurityoptions` VALUES (154, 1322452989235863552, '', '');
+INSERT INTO `appapigatewaysecurityoptions` VALUES (155, 1322453089655889920, '', '');
+INSERT INTO `appapigatewaysecurityoptions` VALUES (156, 1329706860249804800, '', '');
+INSERT INTO `appapigatewaysecurityoptions` VALUES (157, 1329707002411544576, '', '');
+INSERT INTO `appapigatewaysecurityoptions` VALUES (158, 1329708512277098496, '', '');
+INSERT INTO `appapigatewaysecurityoptions` VALUES (159, 1329708625917571072, '', '');
-- ----------------------------
-- Table structure for cap.published
@@ -1353,7 +1436,14 @@ CREATE TABLE `cap.published` (
-- ----------------------------
-- Records of cap.published
-- ----------------------------
-INSERT INTO `cap.published` VALUES (1322190029573971968, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1322190029573971968\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/30 22:54:02 +08:00\",\"cap-corr-id\":\"1322190029573971968\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-30T22:54:02.8070185+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"ReRoute\"}}', 0, '2020-10-30 22:54:03', '2020-10-31 22:54:03', 'Succeeded');
+INSERT INTO `cap.published` VALUES (1329706861734588416, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1329706861734588416\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/11/20 16:43:15 +08:00\",\"cap-corr-id\":\"1329706861734588416\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-11-20T16:43:15.2508199+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"ReRoute\"}}', 0, '2020-11-20 16:43:15', '2020-11-21 16:43:15', 'Succeeded');
+INSERT INTO `cap.published` VALUES (1329707002549956608, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1329707002549956608\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/11/20 16:43:48 +08:00\",\"cap-corr-id\":\"1329707002549956608\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-11-20T16:43:48.825984+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"ReRoute\"}}', 0, '2020-11-20 16:43:49', '2020-11-21 16:43:49', 'Succeeded');
+INSERT INTO `cap.published` VALUES (1329708211352563712, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1329708211352563712\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/11/20 16:48:37 +08:00\",\"cap-corr-id\":\"1329708211352563712\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-11-20T16:48:37.0273285+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Modify\",\"Object\":\"ReRoute\"}}', 0, '2020-11-20 16:48:37', '2020-11-21 16:48:37', 'Succeeded');
+INSERT INTO `cap.published` VALUES (1329708364180418560, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1329708364180418560\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/11/20 16:49:13 +08:00\",\"cap-corr-id\":\"1329708364180418560\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-11-20T16:49:13.4642334+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Modify\",\"Object\":\"ReRoute\"}}', 0, '2020-11-20 16:49:13', '2020-11-21 16:49:13', 'Succeeded');
+INSERT INTO `cap.published` VALUES (1329708512352595968, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1329708512352595968\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/11/20 16:49:48 +08:00\",\"cap-corr-id\":\"1329708512352595968\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-11-20T16:49:48.7915448+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"ReRoute\"}}', 0, '2020-11-20 16:49:49', '2020-11-21 16:49:49', 'Succeeded');
+INSERT INTO `cap.published` VALUES (1329708626014040064, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1329708626014040064\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/11/20 16:50:15 +08:00\",\"cap-corr-id\":\"1329708626014040064\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-11-20T16:50:15.8881875+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"ReRoute\"}}', 0, '2020-11-20 16:50:16', '2020-11-21 16:50:16', 'Succeeded');
+INSERT INTO `cap.published` VALUES (1329708867152965632, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1329708867152965632\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/11/20 16:51:13 +08:00\",\"cap-corr-id\":\"1329708867152965632\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-11-20T16:51:13.3820372+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"AggregateRoute\"}}', 0, '2020-11-20 16:51:13', '2020-11-21 16:51:13', 'Succeeded');
+INSERT INTO `cap.published` VALUES (1329709265259524096, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1329709265259524096\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/11/20 16:52:48 +08:00\",\"cap-corr-id\":\"1329709265259524096\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-11-20T16:52:48.2979878+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"AggregateRoute\"}}', 0, '2020-11-20 16:52:48', '2020-11-21 16:52:48', 'Succeeded');
-- ----------------------------
-- Table structure for cap.received
diff --git a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application.Contracts/LINGYUN/Abp/Account/IAccountAppService.cs b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application.Contracts/LINGYUN/Abp/Account/IAccountAppService.cs
index c299db0a3..09490c334 100644
--- a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application.Contracts/LINGYUN/Abp/Account/IAccountAppService.cs
+++ b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application.Contracts/LINGYUN/Abp/Account/IAccountAppService.cs
@@ -12,7 +12,7 @@ namespace LINGYUN.Abp.Account
///
Task RegisterAsync(PhoneRegisterDto input);
///
- /// 通过微信注册用户账户
+ /// 通过微信小程序注册用户账户
///
///
///
diff --git a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN.Abp.Account.Application.csproj b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN.Abp.Account.Application.csproj
index 9813dc753..3e595fe0f 100644
--- a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN.Abp.Account.Application.csproj
+++ b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN.Abp.Account.Application.csproj
@@ -15,7 +15,7 @@
-
+
diff --git a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AbpAccountApplicationModule.cs b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AbpAccountApplicationModule.cs
index 4fe51cb5d..8300e99a3 100644
--- a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AbpAccountApplicationModule.cs
+++ b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AbpAccountApplicationModule.cs
@@ -1,5 +1,5 @@
using LINGYUN.Abp.Identity;
-using LINGYUN.Abp.WeChat.Authorization;
+using LINGYUN.Abp.WeChat.MiniProgram;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.Account
@@ -8,7 +8,7 @@ namespace LINGYUN.Abp.Account
typeof(Volo.Abp.Account.AbpAccountApplicationModule),
typeof(AbpAccountApplicationContractsModule),
typeof(AbpIdentityDomainModule),
- typeof(AbpWeChatAuthorizationModule))]
+ typeof(AbpWeChatMiniProgramModule))]
public class AbpAccountApplicationModule : AbpModule
{
diff --git a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs
index 7df961677..d5d74bf43 100644
--- a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs
+++ b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs
@@ -1,9 +1,12 @@
using LINGYUN.Abp.Identity;
using LINGYUN.Abp.Identity.Security;
using LINGYUN.Abp.Identity.Settings;
-using LINGYUN.Abp.WeChat.Authorization;
+using LINGYUN.Abp.WeChat;
+using LINGYUN.Abp.WeChat.MiniProgram;
+using LINGYUN.Abp.WeChat.OpenId;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Caching.Distributed;
+using Microsoft.Extensions.Options;
using System;
using System.ComponentModel.DataAnnotations;
using System.Text;
@@ -27,6 +30,7 @@ namespace LINGYUN.Abp.Account
protected IIdentityUserRepository UserRepository { get; }
protected IUserSecurityCodeSender SecurityCodeSender { get; }
protected IWeChatOpenIdFinder WeChatOpenIdFinder { get; }
+ protected AbpWeChatMiniProgramOptions MiniProgramOptions { get; }
protected IDistributedCache SecurityTokenCache { get; }
@@ -37,7 +41,8 @@ namespace LINGYUN.Abp.Account
IWeChatOpenIdFinder weChatOpenIdFinder,
IIdentityUserRepository userRepository,
IUserSecurityCodeSender securityCodeSender,
- IDistributedCache securityTokenCache)
+ IDistributedCache securityTokenCache,
+ IOptions miniProgramOptions)
{
TotpService = totpService;
UserStore = userStore;
@@ -46,6 +51,7 @@ namespace LINGYUN.Abp.Account
WeChatOpenIdFinder = weChatOpenIdFinder;
SecurityCodeSender = securityCodeSender;
SecurityTokenCache = securityTokenCache;
+ MiniProgramOptions = miniProgramOptions.Value;
LocalizationResource = typeof(AccountResource);
}
@@ -55,9 +61,9 @@ namespace LINGYUN.Abp.Account
ThowIfInvalidEmailAddress(input.EmailAddress);
await CheckSelfRegistrationAsync();
- var wehchatOpenId = await WeChatOpenIdFinder.FindAsync(input.Code);
+ var wehchatOpenId = await WeChatOpenIdFinder.FindAsync(input.Code, MiniProgramOptions.AppId, MiniProgramOptions.AppSecret);
- var user = await UserManager.FindByLoginAsync(AbpWeChatAuthorizationConsts.ProviderKey, wehchatOpenId.OpenId);
+ var user = await UserManager.FindByLoginAsync(AbpWeChatMiniProgramConsts.ProviderKey, wehchatOpenId.OpenId);
if (user != null)
{
// 应该要抛出微信号已注册异常,而不是直接返回注册用户数据,否则造成用户信息泄露
@@ -80,7 +86,7 @@ namespace LINGYUN.Abp.Account
(await UserManager.AddDefaultRolesAsync(user)).CheckErrors();
- var userLogin = new UserLoginInfo(AbpWeChatAuthorizationConsts.ProviderKey, wehchatOpenId.OpenId, AbpWeChatAuthorizationConsts.DisplayName);
+ var userLogin = new UserLoginInfo(AbpWeChatMiniProgramConsts.ProviderKey, wehchatOpenId.OpenId, AbpWeChatGlobalConsts.DisplayName);
(await UserManager.AddLoginAsync(user, userLogin)).CheckErrors();
await CurrentUnitOfWork.SaveChangesAsync();
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN.Abp.IdentityServer.WeChat.csproj b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN.Abp.IdentityServer.WeChat.csproj
new file mode 100644
index 000000000..ac41f1cc2
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN.Abp.IdentityServer.WeChat.csproj
@@ -0,0 +1,24 @@
+
+
+
+
+
+ netcoreapp3.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/AbpIdentityServerWeChatModule.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/AbpIdentityServerWeChatModule.cs
new file mode 100644
index 000000000..8ab734a42
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/AbpIdentityServerWeChatModule.cs
@@ -0,0 +1,54 @@
+using LINGYUN.Abp.IdentityServer.WeChat.MiniProgram;
+using LINGYUN.Abp.IdentityServer.WeChat.Official;
+using LINGYUN.Abp.WeChat.MiniProgram;
+using LINGYUN.Abp.WeChat.Official;
+using Microsoft.AspNetCore.Authentication;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.IdentityServer;
+using Volo.Abp.IdentityServer.Localization;
+using Volo.Abp.Localization;
+using Volo.Abp.Modularity;
+using Volo.Abp.VirtualFileSystem;
+
+namespace LINGYUN.Abp.IdentityServer.WeChat
+{
+ [DependsOn(
+ typeof(AbpWeChatOfficialModule),
+ typeof(AbpWeChatMiniProgramModule),
+ typeof(AbpIdentityServerDomainModule))]
+ public class AbpIdentityServerWeChatModule : AbpModule
+ {
+ public override void PreConfigureServices(ServiceConfigurationContext context)
+ {
+ var configuration = context.Services.GetConfiguration();
+
+ PreConfigure(builder =>
+ {
+ builder.AddProfileService();
+
+ // TODO: 两个类型不通用配置项,不然只需要一个
+ builder.AddExtensionGrantValidator();
+ builder.AddExtensionGrantValidator();
+ });
+ }
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.FileSets.AddEmbedded();
+ });
+
+ Configure(options =>
+ {
+ options.Resources
+ .Get()
+ .AddVirtualJson("/LINGYUN/Abp/IdentityServer/WeChat/Localization");
+ });
+
+ context.Services
+ .AddAuthentication()
+ .AddWeChat();
+ }
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/IWeChatResourceDataSeeder.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/IWeChatResourceDataSeeder.cs
new file mode 100644
index 000000000..38d591d26
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/IWeChatResourceDataSeeder.cs
@@ -0,0 +1,9 @@
+using System.Threading.Tasks;
+
+namespace LINGYUN.Abp.IdentityServer
+{
+ public interface IWeChatResourceDataSeeder
+ {
+ Task CreateStandardResourcesAsync();
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Localization/en.json b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Localization/en.json
new file mode 100644
index 000000000..77d155b38
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Localization/en.json
@@ -0,0 +1,10 @@
+{
+ "culture": "en",
+ "texts": {
+ "SelfRegistrationDisabledMessage": "Self-registration is disabled for this application. Please contact the application administrator to register a new user.",
+ "InvalidGrant:GrantTypeInvalid": "The type of authorization that is not allowed!",
+ "InvalidGrant:WeChatTokenInvalid": "WeChat authentication failed!",
+ "InvalidGrant:WeChatCodeNotFound": "The code obtained when WeChat is logged in is empty or does not exist!",
+ "InvalidGrant:WeChatNotRegister": "User WeChat account not registed!"
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Localization/zh-Hans.json b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Localization/zh-Hans.json
new file mode 100644
index 000000000..72a2995b4
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Localization/zh-Hans.json
@@ -0,0 +1,10 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ "SelfRegistrationDisabledMessage": "应用程序未开放注册,请联系管理员添加新用户.",
+ "InvalidGrant:GrantTypeInvalid": "不被允许的授权类型!",
+ "InvalidGrant:WeChatTokenInvalid": "微信认证失败!",
+ "InvalidGrant:WeChatCodeNotFound": "微信登录时获取的 code 为空或不存在!",
+ "InvalidGrant:WeChatNotRegister": "用户微信账号未绑定!"
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/MiniProgram/WeChatMiniProgramGrantValidator.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/MiniProgram/WeChatMiniProgramGrantValidator.cs
new file mode 100644
index 000000000..d3588e02e
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/MiniProgram/WeChatMiniProgramGrantValidator.cs
@@ -0,0 +1,118 @@
+using IdentityModel;
+using IdentityServer4.Events;
+using IdentityServer4.Models;
+using IdentityServer4.Services;
+using IdentityServer4.Validation;
+using LINGYUN.Abp.WeChat;
+using LINGYUN.Abp.WeChat.MiniProgram;
+using LINGYUN.Abp.WeChat.OpenId;
+using LINGYUN.Abp.WeChat.Security.Claims;
+using Microsoft.AspNetCore.Identity;
+using Microsoft.Extensions.Localization;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.Net.Http;
+using System.Security.Claims;
+using System.Threading.Tasks;
+using Volo.Abp.Identity;
+using Volo.Abp.IdentityServer.Localization;
+using Volo.Abp.Security.Claims;
+using IdentityUser = Volo.Abp.Identity.IdentityUser;
+
+namespace LINGYUN.Abp.IdentityServer.WeChat.MiniProgram
+{
+ ///
+ /// 对于小程序绑定用户的扩展授权验证器
+ ///
+ public class WeChatMiniProgramGrantValidator : IExtensionGrantValidator
+ {
+ protected ILogger Logger { get; }
+ protected AbpWeChatMiniProgramOptions Options { get; }
+ protected IHttpClientFactory HttpClientFactory{ get; }
+ protected IEventService EventService { get; }
+ protected IWeChatOpenIdFinder WeChatOpenIdFinder { get; }
+ protected IIdentityUserRepository UserRepository { get; }
+ protected UserManager UserManager { get; }
+ protected SignInManager SignInManager { get; }
+ protected IStringLocalizer Localizer { get; }
+ protected PhoneNumberTokenProvider PhoneNumberTokenProvider { get; }
+
+
+ public WeChatMiniProgramGrantValidator(
+ IEventService eventService,
+ IWeChatOpenIdFinder weChatOpenIdFinder,
+ IHttpClientFactory httpClientFactory,
+ UserManager userManager,
+ IIdentityUserRepository userRepository,
+ SignInManager signInManager,
+ IStringLocalizer stringLocalizer,
+ PhoneNumberTokenProvider phoneNumberTokenProvider,
+ IOptions options,
+ ILogger logger)
+ {
+ Logger = logger;
+ Options = options.Value;
+
+ EventService = eventService;
+ UserManager = userManager;
+ SignInManager = signInManager;
+ Localizer = stringLocalizer;
+ UserRepository = userRepository;
+ WeChatOpenIdFinder = weChatOpenIdFinder;
+ HttpClientFactory = httpClientFactory;
+ PhoneNumberTokenProvider = phoneNumberTokenProvider;
+ }
+
+ public string GrantType => AbpWeChatMiniProgramConsts.GrantType;
+
+ public async Task ValidateAsync(ExtensionGrantValidationContext context)
+ {
+ var raw = context.Request.Raw;
+ var credential = raw.Get(OidcConstants.TokenRequest.GrantType);
+ if (credential == null || !credential.Equals(GrantType))
+ {
+ Logger.LogWarning("Invalid grant type: not allowed");
+ context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant,
+ Localizer["InvalidGrant:GrantTypeInvalid"]);
+ return;
+ }
+ // TODO: 统一命名规范, 微信认证传递的 code 改为 WeChatOpenIdConsts.WeCahtCodeKey
+ var wechatCode = raw.Get(AbpWeChatGlobalConsts.TokenName);
+ if (wechatCode.IsNullOrWhiteSpace() || wechatCode.IsNullOrWhiteSpace())
+ {
+ Logger.LogWarning("Invalid grant type: wechat code not found");
+ context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant,
+ Localizer["InvalidGrant:WeChatCodeNotFound"]);
+ return;
+ }
+ var wechatOpenId = await WeChatOpenIdFinder.FindAsync(wechatCode, Options.AppId, Options.AppSecret);
+ // 如果存在 UnionId优先使用
+ var currentUser = await UserManager.FindByLoginAsync(AbpWeChatMiniProgramConsts.ProviderKey, wechatOpenId.UnionId ?? wechatOpenId.OpenId);
+ if(currentUser == null)
+ {
+ Logger.LogWarning("Invalid grant type: wechat openid: {0} not register", wechatOpenId.OpenId);
+ context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant,
+ Localizer["InvalidGrant:WeChatNotRegister"]);
+ return;
+ }
+ var sub = await UserManager.GetUserIdAsync(currentUser);
+
+ var additionalClaims = new List();
+ if (currentUser.TenantId.HasValue)
+ {
+ additionalClaims.Add(new Claim(AbpClaimTypes.TenantId, currentUser.TenantId?.ToString()));
+ }
+ additionalClaims.Add(new Claim(AbpWeChatClaimTypes.OpenId, wechatOpenId.OpenId));
+ if (!wechatOpenId.UnionId.IsNullOrWhiteSpace())
+ {
+ additionalClaims.Add(new Claim(AbpWeChatClaimTypes.UnionId, wechatOpenId.UnionId));
+ }
+
+ await EventService.RaiseAsync(new UserLoginSuccessEvent(currentUser.UserName, wechatOpenId.OpenId, null));
+ context.Result = new GrantValidationResult(sub,
+ AbpWeChatMiniProgramConsts.AuthenticationMethod, additionalClaims.ToArray());
+ }
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/MiniProgram/WeChatMiniProgramProfileService.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/MiniProgram/WeChatMiniProgramProfileService.cs
new file mode 100644
index 000000000..180241c15
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/MiniProgram/WeChatMiniProgramProfileService.cs
@@ -0,0 +1,61 @@
+using IdentityServer4.AspNetIdentity;
+using IdentityServer4.Models;
+using LINGYUN.Abp.WeChat.Security.Claims;
+using Microsoft.AspNetCore.Identity;
+using System.Linq;
+using System.Security.Principal;
+using System.Threading.Tasks;
+using Volo.Abp.Identity;
+using Volo.Abp.MultiTenancy;
+using Volo.Abp.Uow;
+using IdentityUser = Volo.Abp.Identity.IdentityUser;
+
+namespace LINGYUN.Abp.IdentityServer.WeChat.MiniProgram
+{
+ public class WeChatMiniProgramProfileService : ProfileService
+ {
+ protected ICurrentTenant CurrentTenant { get; }
+ public WeChatMiniProgramProfileService(
+ IdentityUserManager userManager,
+ IUserClaimsPrincipalFactory claimsFactory,
+ ICurrentTenant currentTenant)
+ : base(userManager, claimsFactory)
+ {
+ CurrentTenant = currentTenant;
+ }
+
+ [UnitOfWork]
+ public override async Task GetProfileDataAsync(ProfileDataRequestContext context)
+ {
+ using (CurrentTenant.Change(context.Subject.FindTenantId()))
+ {
+ await base.GetProfileDataAsync(context);
+
+ // TODO: 可以从令牌获取openid, 安全性呢?
+ TryAddWeChatClaim(context, AbpWeChatClaimTypes.OpenId);
+ TryAddWeChatClaim(context, AbpWeChatClaimTypes.UnionId);
+ }
+ }
+
+ [UnitOfWork]
+ public override async Task IsActiveAsync(IsActiveContext context)
+ {
+ using (CurrentTenant.Change(context.Subject.FindTenantId()))
+ {
+ await base.IsActiveAsync(context);
+ }
+ }
+
+ protected virtual void TryAddWeChatClaim(ProfileDataRequestContext context, string weChatClaimType)
+ {
+ if (context.RequestedClaimTypes.Any(rc => rc.Contains(weChatClaimType)))
+ {
+ var weChatClaim = context.Subject.FindFirst(weChatClaimType);
+ if (weChatClaim != null)
+ {
+ context.IssuedClaims.Add(weChatClaim);
+ }
+ }
+ }
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Official/WeChatOfficialGrantValidator.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Official/WeChatOfficialGrantValidator.cs
new file mode 100644
index 000000000..0de5acf5a
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Official/WeChatOfficialGrantValidator.cs
@@ -0,0 +1,117 @@
+using IdentityModel;
+using IdentityServer4.Events;
+using IdentityServer4.Models;
+using IdentityServer4.Services;
+using IdentityServer4.Validation;
+using LINGYUN.Abp.WeChat;
+using LINGYUN.Abp.WeChat.Official;
+using LINGYUN.Abp.WeChat.OpenId;
+using LINGYUN.Abp.WeChat.Security.Claims;
+using Microsoft.AspNetCore.Identity;
+using Microsoft.Extensions.Localization;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.Net.Http;
+using System.Security.Claims;
+using System.Threading.Tasks;
+using Volo.Abp.Identity;
+using Volo.Abp.IdentityServer.Localization;
+using Volo.Abp.Security.Claims;
+using IdentityUser = Volo.Abp.Identity.IdentityUser;
+
+namespace LINGYUN.Abp.IdentityServer.WeChat.Official
+{
+ ///
+ /// 对于公众平台绑定用户的扩展授权验证器
+ ///
+ public class WeChatOfficialGrantValidator : IExtensionGrantValidator
+ {
+ protected ILogger Logger { get; }
+ protected AbpWeChatOfficialOptions Options { get; }
+ protected IHttpClientFactory HttpClientFactory { get; }
+ protected IEventService EventService { get; }
+ protected IWeChatOpenIdFinder WeChatOpenIdFinder { get; }
+ protected IIdentityUserRepository UserRepository { get; }
+ protected UserManager UserManager { get; }
+ protected SignInManager SignInManager { get; }
+ protected IStringLocalizer Localizer { get; }
+ protected PhoneNumberTokenProvider PhoneNumberTokenProvider { get; }
+
+
+ public WeChatOfficialGrantValidator(
+ IEventService eventService,
+ IWeChatOpenIdFinder weChatOpenIdFinder,
+ IHttpClientFactory httpClientFactory,
+ UserManager userManager,
+ IIdentityUserRepository userRepository,
+ SignInManager signInManager,
+ IStringLocalizer stringLocalizer,
+ PhoneNumberTokenProvider phoneNumberTokenProvider,
+ IOptions options,
+ ILogger logger)
+ {
+ Logger = logger;
+ Options = options.Value;
+
+ EventService = eventService;
+ UserManager = userManager;
+ SignInManager = signInManager;
+ Localizer = stringLocalizer;
+ UserRepository = userRepository;
+ WeChatOpenIdFinder = weChatOpenIdFinder;
+ HttpClientFactory = httpClientFactory;
+ PhoneNumberTokenProvider = phoneNumberTokenProvider;
+ }
+
+ public string GrantType => AbpWeChatOfficialConsts.GrantType;
+
+ public async Task ValidateAsync(ExtensionGrantValidationContext context)
+ {
+ var raw = context.Request.Raw;
+ var credential = raw.Get(OidcConstants.TokenRequest.GrantType);
+ if (credential == null || !credential.Equals(GrantType))
+ {
+ Logger.LogWarning("Invalid grant type: not allowed");
+ context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant,
+ Localizer["InvalidGrant:GrantTypeInvalid"]);
+ return;
+ }
+ // TODO: 统一命名规范, 微信认证传递的 code 改为 WeChatOpenIdConsts.WeCahtCodeKey
+ var wechatCode = raw.Get(AbpWeChatGlobalConsts.TokenName);
+ if (wechatCode.IsNullOrWhiteSpace() || wechatCode.IsNullOrWhiteSpace())
+ {
+ Logger.LogWarning("Invalid grant type: wechat code not found");
+ context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant,
+ Localizer["InvalidGrant:WeChatCodeNotFound"]);
+ return;
+ }
+ var wechatOpenId = await WeChatOpenIdFinder.FindAsync(wechatCode, Options.AppId, Options.AppSecret);
+ var currentUser = await UserManager.FindByLoginAsync(AbpWeChatOfficialConsts.ProviderKey, wechatOpenId.OpenId);
+ if (currentUser == null)
+ {
+ Logger.LogWarning("Invalid grant type: wechat openid: {0} not register", wechatOpenId.OpenId);
+ context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant,
+ Localizer["InvalidGrant:WeChatNotRegister"]);
+ return;
+ }
+ var sub = await UserManager.GetUserIdAsync(currentUser);
+
+ var additionalClaims = new List();
+ if (currentUser.TenantId.HasValue)
+ {
+ additionalClaims.Add(new Claim(AbpClaimTypes.TenantId, currentUser.TenantId?.ToString()));
+ }
+ additionalClaims.Add(new Claim(AbpWeChatClaimTypes.OpenId, wechatOpenId.OpenId));
+ if (!wechatOpenId.UnionId.IsNullOrWhiteSpace())
+ {
+ additionalClaims.Add(new Claim(AbpWeChatClaimTypes.UnionId, wechatOpenId.UnionId));
+ }
+
+ await EventService.RaiseAsync(new UserLoginSuccessEvent(currentUser.UserName, wechatOpenId.OpenId, null));
+ context.Result = new GrantValidationResult(sub,
+ AbpWeChatOfficialConsts.AuthenticationMethod, additionalClaims.ToArray());
+ }
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Official/WeChatOfficialOAuthConsts.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Official/WeChatOfficialOAuthConsts.cs
new file mode 100644
index 000000000..bb632a84d
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Official/WeChatOfficialOAuthConsts.cs
@@ -0,0 +1,71 @@
+using LINGYUN.Abp.WeChat;
+using LINGYUN.Abp.WeChat.Official;
+
+namespace LINGYUN.Abp.IdentityServer.WeChat.Official
+{
+ ///
+ /// 与微信公众号认证相关的静态(可变)常量
+ ///
+ public static class WeChatOfficialOAuthConsts
+ {
+ ///
+ /// 微信个人信息标识
+ ///
+ public static string ProfileKey { get; set; } = "wechat.profile";
+ ///
+ /// 微信提供者标识
+ ///
+ public static string ProviderKey => AbpWeChatOfficialConsts.ProviderKey;
+ ///
+ /// 微信提供者显示名称
+ ///
+ public static string DisplayName => AbpWeChatGlobalConsts.DisplayName;
+ ///
+ /// 回调地址
+ ///
+ public static string CallbackPath { get; set; } = "/signin-wechat";
+
+ ///
+ /// 微信客户端外的网页登录
+ ///
+ public const string QrConnectEndpoint = "https://open.weixin.qq.com/connect/qrconnect";
+
+ ///
+ /// 微信客户端内的网页登录
+ ///
+ public const string AuthorizationEndpoint = "https://open.weixin.qq.com/connect/oauth2/authorize";
+
+ ///
+ /// 用户允许授权后通过返回的code换取access_token地址
+ ///
+ public const string TokenEndpoint = "https://api.weixin.qq.com/sns/oauth2/access_token";
+
+ ///
+ /// 使用access_token获取用户个人信息地址
+ ///
+ public const string UserInformationEndpoint = "https://api.weixin.qq.com/sns/userinfo";
+ ///
+ /// 弹出授权页面,可通过openid拿到昵称、性别、所在地。
+ /// 并且, 即使在未关注的情况下,只要用户授权,也能获取其信息
+ ///
+ ///
+ /// 详询:
+ ///
+ ///
+ /// 以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。
+ /// 但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息
+ ///
+ public const string UserInfoScope = "snsapi_userinfo";
+ ///
+ /// 不弹出授权页面,直接跳转,只能获取用户openid
+ ///
+ ///
+ /// 详询:
+ ///
+ ///
+ /// 以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。
+ /// 用户感知的就是直接进入了回调页(往往是业务页面)
+ ///
+ public const string LoginScope = "snsapi_login";
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Official/WeChatOfficialSignatureMiddleware.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Official/WeChatOfficialSignatureMiddleware.cs
new file mode 100644
index 000000000..7aa651177
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/Official/WeChatOfficialSignatureMiddleware.cs
@@ -0,0 +1,75 @@
+using LINGYUN.Abp.WeChat.Official;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections;
+using System.Threading.Tasks;
+using Volo.Abp;
+using Volo.Abp.DependencyInjection;
+
+namespace LINGYUN.Abp.IdentityServer.WeChat.Official
+{
+ public class WeChatOfficialSignatureMiddleware : IMiddleware, ITransientDependency
+ {
+ protected AbpWeChatOfficialOptions Options { get; }
+ public WeChatOfficialSignatureMiddleware(IOptions options)
+ {
+ Options = options.Value;
+ }
+
+ public async Task InvokeAsync(HttpContext context, RequestDelegate next)
+ {
+ if (context.Request.Path.HasValue)
+ {
+ var requestPath = context.Request.Path.Value;
+ // 访问地址是否与定义的地址匹配
+ if (requestPath.Equals(Options.Url))
+ {
+ var timestamp = context.Request.Query["timestamp"];
+ var nonce = context.Request.Query["nonce"];
+ var signature = context.Request.Query["signature"];
+ var echostr = context.Request.Query["echostr"];
+ // 验证消息合法性
+ var check = CheckWeChatSignature(Options.Token, timestamp, nonce, signature);
+ if (check)
+ {
+ // 验证通过需要把微信服务器传递的字符原封不动传回
+ await context.Response.WriteAsync(echostr);
+ return;
+ }
+ // 微信消息验证不通过
+ throw new AbpException("Invalid wechat signature");
+ }
+ }
+ // 不属于微信的消息进入下一个中间件
+ await next(context);
+ }
+
+ protected bool CheckWeChatSignature(string token, string timestamp, string nonce, string signature)
+ {
+ var al = new ArrayList
+ {
+ token,
+ timestamp,
+ nonce
+ };
+ // step1 排序
+ al.Sort();
+ string signatureStr = string.Empty;
+ // step2 拼接
+ for (int i = 0; i < al.Count; i++)
+ {
+ signatureStr += al[i];
+ }
+ // step3 SHA1加密
+ byte[] bytes_out = signatureStr.Sha1();
+ string result = BitConverter.ToString(bytes_out).Replace("-", "");
+ // step4 比对
+ if (result.Equals(signature, StringComparison.CurrentCultureIgnoreCase))
+ {
+ return true;
+ }
+ return false;
+ }
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/WeChatResourceDataSeeder.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/WeChatResourceDataSeeder.cs
new file mode 100644
index 000000000..b5e8b7a55
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/LINGYUN/Abp/IdentityServer/WeChat/WeChatResourceDataSeeder.cs
@@ -0,0 +1,86 @@
+using LINGYUN.Abp.IdentityServer.WeChat.Official;
+using LINGYUN.Abp.WeChat.Security.Claims;
+using System.Threading.Tasks;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Guids;
+using Volo.Abp.Identity;
+using Volo.Abp.IdentityServer.IdentityResources;
+
+namespace LINGYUN.Abp.IdentityServer
+{
+ public class WeChatResourceDataSeeder : IWeChatResourceDataSeeder, ITransientDependency
+ {
+ protected IIdentityClaimTypeRepository ClaimTypeRepository { get; }
+ protected IIdentityResourceRepository IdentityResourceRepository { get; }
+ protected IGuidGenerator GuidGenerator { get; }
+
+ public WeChatResourceDataSeeder(
+ IIdentityResourceRepository identityResourceRepository,
+ IGuidGenerator guidGenerator,
+ IIdentityClaimTypeRepository claimTypeRepository)
+ {
+ IdentityResourceRepository = identityResourceRepository;
+ GuidGenerator = guidGenerator;
+ ClaimTypeRepository = claimTypeRepository;
+ }
+
+ public virtual async Task CreateStandardResourcesAsync()
+ {
+ var wechatClaimTypes = new string[]
+ {
+ AbpWeChatClaimTypes.AvatarUrl,
+ AbpWeChatClaimTypes.City,
+ AbpWeChatClaimTypes.Country,
+ AbpWeChatClaimTypes.NickName,
+ AbpWeChatClaimTypes.OpenId,
+ AbpWeChatClaimTypes.Privilege,
+ AbpWeChatClaimTypes.Province,
+ AbpWeChatClaimTypes.Sex,
+ AbpWeChatClaimTypes.UnionId
+ };
+
+ var wechatResource = new IdentityServer4.Models.IdentityResource(
+ WeChatOfficialOAuthConsts.ProfileKey,
+ WeChatOfficialOAuthConsts.DisplayName,
+ wechatClaimTypes);
+
+ foreach (var claimType in wechatClaimTypes)
+ {
+ await AddClaimTypeIfNotExistsAsync(claimType);
+ }
+
+ await AddIdentityResourceIfNotExistsAsync(wechatResource);
+ }
+
+ protected virtual async Task AddIdentityResourceIfNotExistsAsync(IdentityServer4.Models.IdentityResource resource)
+ {
+ if (await IdentityResourceRepository.CheckNameExistAsync(resource.Name))
+ {
+ return;
+ }
+
+ await IdentityResourceRepository.InsertAsync(
+ new IdentityResource(
+ GuidGenerator.Create(),
+ resource
+ )
+ );
+ }
+
+ protected virtual async Task AddClaimTypeIfNotExistsAsync(string claimType)
+ {
+ if (await ClaimTypeRepository.AnyAsync(claimType))
+ {
+ return;
+ }
+
+ await ClaimTypeRepository.InsertAsync(
+ new IdentityClaimType(
+ GuidGenerator.Create(),
+ claimType,
+ isStatic: true
+ )
+ );
+ }
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Authentication/WeChat/Official/WeChatOfficialOAuthHandler.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Authentication/WeChat/Official/WeChatOfficialOAuthHandler.cs
new file mode 100644
index 000000000..de391d059
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Authentication/WeChat/Official/WeChatOfficialOAuthHandler.cs
@@ -0,0 +1,331 @@
+using LINGYUN.Abp.IdentityServer.WeChat.Official;
+using LINGYUN.Abp.WeChat.Official;
+using Microsoft.AspNetCore.Authentication.OAuth;
+using Microsoft.AspNetCore.WebUtilities;
+using Microsoft.Extensions.Caching.Distributed;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using Microsoft.Extensions.Primitives;
+using Microsoft.Net.Http.Headers;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Net.Http;
+using System.Security.Claims;
+using System.Text;
+using System.Text.Encodings.Web;
+using System.Text.Json;
+using System.Threading.Tasks;
+using Volo.Abp.Caching;
+
+namespace Microsoft.AspNetCore.Authentication.WeChat.Official
+{
+ ///
+ /// 网页授权只有公众平台的实现
+ ///
+ public class WeChatOfficialOAuthHandler : OAuthHandler
+ {
+ protected IDistributedCache Cache { get; }
+ protected AbpWeChatOfficialOptions WeChatOfficialOptions { get; }
+ public WeChatOfficialOAuthHandler(
+ IDistributedCache cache,
+ IOptionsMonitor options,
+ IOptions weChatOfficialOptions,
+ ILoggerFactory logger,
+ UrlEncoder encoder,
+ ISystemClock clock)
+ : base(options, logger, encoder, clock)
+ {
+ Cache = cache;
+ WeChatOfficialOptions = weChatOfficialOptions.Value;
+ }
+
+ protected override Task InitializeHandlerAsync()
+ {
+ // 用配置项重写
+ Options.ClientId = WeChatOfficialOptions.AppId;
+ Options.ClientSecret = WeChatOfficialOptions.AppSecret;
+ return base.InitializeHandlerAsync();
+ }
+
+ protected override async Task CreateTicketAsync(ClaimsIdentity identity, AuthenticationProperties properties, OAuthTokenResponse tokens)
+ {
+ var address = QueryHelpers.AddQueryString(Options.UserInformationEndpoint, new Dictionary
+ {
+ ["access_token"] = tokens.AccessToken,
+ ["openid"] = tokens.Response.GetRootString("openid")
+ });
+
+ var response = await Backchannel.GetAsync(address);
+ if (!response.IsSuccessStatusCode)
+ {
+ Logger.LogError("An error occurred while retrieving the user profile: the remote server " +
+ "returned a {Status} response with the following payload: {Headers} {Body}.",
+ /* Status: */ response.StatusCode,
+ /* Headers: */ response.Headers.ToString(),
+ /* Body: */ await response.Content.ReadAsStringAsync());
+
+ throw new HttpRequestException("An error occurred while retrieving user information.");
+ }
+
+ var payload = JsonDocument.Parse(await response.Content.ReadAsStringAsync());
+ if (!string.IsNullOrEmpty(payload.GetRootString("errcode")))
+ {
+ Logger.LogError("An error occurred while retrieving the user profile: the remote server " +
+ "returned a {Status} response with the following payload: {Headers} {Body}.",
+ /* Status: */ response.StatusCode,
+ /* Headers: */ response.Headers.ToString(),
+ /* Body: */ await response.Content.ReadAsStringAsync());
+
+ throw new HttpRequestException("An error occurred while retrieving user information.");
+ }
+
+ var context = new OAuthCreatingTicketContext(new ClaimsPrincipal(identity), properties, Context, Scheme, Options, Backchannel, tokens, payload.RootElement);
+ context.RunClaimActions();
+
+ await Events.CreatingTicket(context);
+
+ // TODO: 此处通过唯一的 CorrelationId, 将 properties生成的State缓存删除
+ var state = Request.Query["state"];
+
+ var stateCacheKey = WeChatOfficialStateCacheItem.CalculateCacheKey(state, null);
+ await Cache.RemoveAsync(stateCacheKey, token: Context.RequestAborted);
+
+ return new AuthenticationTicket(context.Principal, context.Properties, Scheme.Name);
+ }
+
+ ///
+ /// code换取access_token
+ ///
+ protected override async Task ExchangeCodeAsync(OAuthCodeExchangeContext context)
+ {
+ var address = QueryHelpers.AddQueryString(Options.TokenEndpoint, new Dictionary()
+ {
+ ["appid"] = Options.ClientId,
+ ["secret"] = Options.ClientSecret,
+ ["code"] = context.Code,
+ ["grant_type"] = "authorization_code"
+ });
+
+ var response = await Backchannel.GetAsync(address);
+ if (!response.IsSuccessStatusCode)
+ {
+ Logger.LogError("An error occurred while retrieving an access token: the remote server " +
+ "returned a {Status} response with the following payload: {Headers} {Body}.",
+ /* Status: */ response.StatusCode,
+ /* Headers: */ response.Headers.ToString(),
+ /* Body: */ await response.Content.ReadAsStringAsync());
+
+ return OAuthTokenResponse.Failed(new Exception("An error occurred while retrieving an access token."));
+ }
+
+ var payload = JsonDocument.Parse(await response.Content.ReadAsStringAsync());
+ if (!string.IsNullOrEmpty(payload.GetRootString("errcode")))
+ {
+ Logger.LogError("An error occurred while retrieving an access token: the remote server " +
+ "returned a {Status} response with the following payload: {Headers} {Body}.",
+ /* Status: */ response.StatusCode,
+ /* Headers: */ response.Headers.ToString(),
+ /* Body: */ await response.Content.ReadAsStringAsync());
+
+ return OAuthTokenResponse.Failed(new Exception("An error occurred while retrieving an access token."));
+ }
+ return OAuthTokenResponse.Success(payload);
+ }
+
+ protected override async Task HandleChallengeAsync(AuthenticationProperties properties)
+ {
+ await base.HandleChallengeAsync(properties);
+
+ // TODO: 此处已经生成唯一的 CorrelationId, 可以借此将 properties生成State之后再进行缓存
+ var state = properties.Items[".xsrf"];
+
+ var stateToken = Options.StateDataFormat.Protect(properties);
+ var stateCacheKey = WeChatOfficialStateCacheItem.CalculateCacheKey(state, null);
+
+ await Cache
+ .SetAsync(
+ stateCacheKey,
+ new WeChatOfficialStateCacheItem(stateToken),
+ new DistributedCacheEntryOptions
+ {
+ AbsoluteExpiration = Clock.UtcNow.AddMinutes(2) // TODO: 设定2分钟过期?
+ },
+ token: Context.RequestAborted);
+ }
+ ///
+ /// 构建用户授权地址
+ ///
+ protected override string BuildChallengeUrl(AuthenticationProperties properties, string redirectUri)
+ {
+ var state = properties.Items[".xsrf"];
+
+ var isWeChatBrewserRequest = IsWeChatBrowser();
+
+ var scope = isWeChatBrewserRequest
+ ? WeChatOfficialOAuthConsts.UserInfoScope
+ : FormatScope();
+
+ var endPoint = isWeChatBrewserRequest
+ ? Options.AuthorizationEndpoint
+ : WeChatOfficialOAuthConsts.QrConnectEndpoint;
+
+ var challengeUrl = QueryHelpers.AddQueryString(endPoint, new Dictionary
+ {
+ ["appid"] = Options.ClientId,
+ ["redirect_uri"] = redirectUri,
+ ["response_type"] = "code"
+ });
+
+ challengeUrl += $"&scope={scope}&state={state}";
+
+ return challengeUrl;
+ }
+
+ protected override async Task HandleRemoteAuthenticateAsync()
+ {
+ var query = Request.Query;
+
+ // TODO: 此处借用唯一的 CorrelationId, 将 properties生成的State缓存取出,进行解密
+ var state = query["state"];
+
+ var stateCacheKey = WeChatOfficialStateCacheItem.CalculateCacheKey(state, null);
+ var stateCacheItem = await Cache.GetAsync(stateCacheKey, token: Context.RequestAborted);
+
+ var properties = Options.StateDataFormat.Unprotect(stateCacheItem.State);
+
+ if (properties == null)
+ {
+ return HandleRequestResult.Fail("The oauth state was missing or invalid.");
+ }
+
+ // OAuth2 10.12 CSRF
+ if (!ValidateCorrelationId(properties))
+ {
+ return HandleRequestResult.Fail("Correlation failed.", properties);
+ }
+
+ var error = query["error"];
+ if (!StringValues.IsNullOrEmpty(error))
+ {
+ // Note: access_denied errors are special protocol errors indicating the user didn't
+ // approve the authorization demand requested by the remote authorization server.
+ // Since it's a frequent scenario (that is not caused by incorrect configuration),
+ // denied errors are handled differently using HandleAccessDeniedErrorAsync().
+ // Visit https://tools.ietf.org/html/rfc6749#section-4.1.2.1 for more information.
+ var errorDescription = query["error_description"];
+ var errorUri = query["error_uri"];
+ if (StringValues.Equals(error, "access_denied"))
+ {
+ var result = await HandleAccessDeniedErrorAsync(properties);
+ if (!result.None)
+ {
+ return result;
+ }
+ var deniedEx = new Exception("Access was denied by the resource owner or by the remote server.");
+ deniedEx.Data["error"] = error.ToString();
+ deniedEx.Data["error_description"] = errorDescription.ToString();
+ deniedEx.Data["error_uri"] = errorUri.ToString();
+
+ return HandleRequestResult.Fail(deniedEx, properties);
+ }
+
+ var failureMessage = new StringBuilder();
+ failureMessage.Append(error);
+ if (!StringValues.IsNullOrEmpty(errorDescription))
+ {
+ failureMessage.Append(";Description=").Append(errorDescription);
+ }
+ if (!StringValues.IsNullOrEmpty(errorUri))
+ {
+ failureMessage.Append(";Uri=").Append(errorUri);
+ }
+
+ var ex = new Exception(failureMessage.ToString());
+ ex.Data["error"] = error.ToString();
+ ex.Data["error_description"] = errorDescription.ToString();
+ ex.Data["error_uri"] = errorUri.ToString();
+
+ return HandleRequestResult.Fail(ex, properties);
+ }
+
+ var code = query["code"];
+
+ if (StringValues.IsNullOrEmpty(code))
+ {
+ return HandleRequestResult.Fail("Code was not found.", properties);
+ }
+
+ var codeExchangeContext = new OAuthCodeExchangeContext(properties, code, BuildRedirectUri(Options.CallbackPath));
+ using var tokens = await ExchangeCodeAsync(codeExchangeContext);
+
+ if (tokens.Error != null)
+ {
+ return HandleRequestResult.Fail(tokens.Error, properties);
+ }
+
+ if (string.IsNullOrEmpty(tokens.AccessToken))
+ {
+ return HandleRequestResult.Fail("Failed to retrieve access token.", properties);
+ }
+
+ var identity = new ClaimsIdentity(ClaimsIssuer);
+
+ if (Options.SaveTokens)
+ {
+ var authTokens = new List();
+
+ authTokens.Add(new AuthenticationToken { Name = "access_token", Value = tokens.AccessToken });
+ if (!string.IsNullOrEmpty(tokens.RefreshToken))
+ {
+ authTokens.Add(new AuthenticationToken { Name = "refresh_token", Value = tokens.RefreshToken });
+ }
+
+ if (!string.IsNullOrEmpty(tokens.TokenType))
+ {
+ authTokens.Add(new AuthenticationToken { Name = "token_type", Value = tokens.TokenType });
+ }
+
+ if (!string.IsNullOrEmpty(tokens.ExpiresIn))
+ {
+ int value;
+ if (int.TryParse(tokens.ExpiresIn, NumberStyles.Integer, CultureInfo.InvariantCulture, out value))
+ {
+ // https://www.w3.org/TR/xmlschema-2/#dateTime
+ // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx
+ var expiresAt = Clock.UtcNow + TimeSpan.FromSeconds(value);
+ authTokens.Add(new AuthenticationToken
+ {
+ Name = "expires_at",
+ Value = expiresAt.ToString("o", CultureInfo.InvariantCulture)
+ });
+ }
+ }
+
+ properties.StoreTokens(authTokens);
+ }
+
+ var ticket = await CreateTicketAsync(identity, properties, tokens);
+ if (ticket != null)
+ {
+ return HandleRequestResult.Success(ticket);
+ }
+ else
+ {
+ return HandleRequestResult.Fail("Failed to retrieve user information from remote server.", properties);
+ }
+ }
+
+ protected override string FormatScope()
+ {
+ return string.Join(",", Options.Scope);
+ }
+
+ protected virtual bool IsWeChatBrowser()
+ {
+ var userAgent = Request.Headers[HeaderNames.UserAgent].ToString();
+
+ return userAgent.Contains("micromessenger", StringComparison.InvariantCultureIgnoreCase);
+ }
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Authentication/WeChat/Official/WeChatOfficialOAuthOptions.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Authentication/WeChat/Official/WeChatOfficialOAuthOptions.cs
new file mode 100644
index 000000000..ce812c8bd
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Authentication/WeChat/Official/WeChatOfficialOAuthOptions.cs
@@ -0,0 +1,47 @@
+using LINGYUN.Abp.IdentityServer.WeChat.Official;
+using LINGYUN.Abp.WeChat.Security.Claims;
+using Microsoft.AspNetCore.Authentication.OAuth;
+using Microsoft.AspNetCore.Http;
+using System.Security.Claims;
+using System.Text.Json;
+
+namespace Microsoft.AspNetCore.Authentication.WeChat.Official
+{
+ public class WeChatOfficialOAuthOptions : OAuthOptions
+ {
+ public WeChatOfficialOAuthOptions()
+ {
+ // 用于防止初始化错误
+ ClientId = "WeChatOfficial";
+ ClientSecret = "WeChatOfficial";
+
+ ClaimsIssuer = WeChatOfficialOAuthConsts.ProviderKey;
+ CallbackPath = new PathString(WeChatOfficialOAuthConsts.CallbackPath);
+
+ AuthorizationEndpoint = WeChatOfficialOAuthConsts.AuthorizationEndpoint;
+ TokenEndpoint = WeChatOfficialOAuthConsts.TokenEndpoint;
+ UserInformationEndpoint = WeChatOfficialOAuthConsts.UserInformationEndpoint;
+
+ Scope.Add(WeChatOfficialOAuthConsts.LoginScope);
+ Scope.Add(WeChatOfficialOAuthConsts.UserInfoScope);
+
+ // 这个原始的属性一定要写进去,框架与UserLogin.ProviderKey进行关联判断是否绑定微信
+ ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "openid");
+ ClaimActions.MapJsonKey(ClaimTypes.Name, "nickname");
+
+ // 把自定义的身份标识写进令牌
+ ClaimActions.MapJsonKey(AbpWeChatClaimTypes.OpenId, "openid");
+ ClaimActions.MapJsonKey(AbpWeChatClaimTypes.UnionId, "unionid");// 公众号如果与小程序关联,这个可以用上
+ ClaimActions.MapJsonKey(AbpWeChatClaimTypes.NickName, "nickname");
+ ClaimActions.MapJsonKey(AbpWeChatClaimTypes.Sex, "sex", ClaimValueTypes.Integer);
+ ClaimActions.MapJsonKey(AbpWeChatClaimTypes.Country, "country");
+ ClaimActions.MapJsonKey(AbpWeChatClaimTypes.Province, "province");
+ ClaimActions.MapJsonKey(AbpWeChatClaimTypes.City, "city");
+ ClaimActions.MapJsonKey(AbpWeChatClaimTypes.AvatarUrl, "headimgurl");
+ ClaimActions.MapCustomJson(AbpWeChatClaimTypes.Privilege, user =>
+ {
+ return string.Join(",", user.GetStrings("privilege"));
+ });
+ }
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Authentication/WeChat/Official/WeChatOfficialStateCacheItem.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Authentication/WeChat/Official/WeChatOfficialStateCacheItem.cs
new file mode 100644
index 000000000..e8c5eb5e8
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Authentication/WeChat/Official/WeChatOfficialStateCacheItem.cs
@@ -0,0 +1,18 @@
+namespace Microsoft.AspNetCore.Authentication.WeChat.Official
+{
+ public class WeChatOfficialStateCacheItem
+ {
+ public string State { get; set; }
+
+ public WeChatOfficialStateCacheItem() { }
+ public WeChatOfficialStateCacheItem(string state)
+ {
+ State = state;
+ }
+
+ public static string CalculateCacheKey(string correlationId, string purpose)
+ {
+ return $"ci:{correlationId};p:{purpose ?? "null"}";
+ }
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Authentication/WeChatAuthenticationExtensions.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Authentication/WeChatAuthenticationExtensions.cs
new file mode 100644
index 000000000..3a5812611
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Authentication/WeChatAuthenticationExtensions.cs
@@ -0,0 +1,65 @@
+using LINGYUN.Abp.IdentityServer.WeChat.Official;
+using LINGYUN.Abp.WeChat;
+using Microsoft.AspNetCore.Authentication.WeChat.Official;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+
+namespace Microsoft.AspNetCore.Authentication
+{
+ public static class WeChatAuthenticationExtensions
+ {
+ ///
+ ///
+ public static AuthenticationBuilder AddWeChat(
+ this AuthenticationBuilder builder)
+ {
+ return builder
+ .AddWeChat(
+ AbpWeChatGlobalConsts.AuthenticationScheme,
+ AbpWeChatGlobalConsts.DisplayName,
+ options => { });
+ }
+
+ ///
+ ///
+ public static AuthenticationBuilder AddWeChat(
+ this AuthenticationBuilder builder,
+ Action configureOptions)
+ {
+ return builder
+ .AddWeChat(
+ AbpWeChatGlobalConsts.AuthenticationScheme,
+ AbpWeChatGlobalConsts.DisplayName,
+ configureOptions);
+ }
+
+ ///
+ ///
+ public static AuthenticationBuilder AddWeChat(
+ this AuthenticationBuilder builder,
+ string authenticationScheme,
+ Action configureOptions)
+ {
+ return builder
+ .AddWeChat(
+ authenticationScheme,
+ WeChatOfficialOAuthConsts.DisplayName,
+ configureOptions);
+ }
+
+ ///
+ ///
+ public static AuthenticationBuilder AddWeChat(
+ this AuthenticationBuilder builder,
+ string authenticationScheme,
+ string displayName,
+ Action configureOptions)
+ {
+ return builder
+ .AddOAuth(
+ authenticationScheme,
+ displayName,
+ configureOptions);
+ }
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Builder/IdentityServerApplicationBuilderExtensions.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Builder/IdentityServerApplicationBuilderExtensions.cs
new file mode 100644
index 000000000..d152749d8
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/Microsoft/AspNetCore/Builder/IdentityServerApplicationBuilderExtensions.cs
@@ -0,0 +1,22 @@
+using LINGYUN.Abp.IdentityServer.WeChat.Official;
+
+namespace Microsoft.AspNetCore.Builder
+{
+ public static class IdentityServerApplicationBuilderExtensions
+ {
+ ///
+ /// 启用中间件可以处理微信服务器消息
+ /// 用于验证消息是否来自于微信服务器
+ ///
+ ///
+ ///
+ /// 也可以用Controller的形式来实现
+ ///
+ ///
+ public static IApplicationBuilder UseWeChatSignature(this IApplicationBuilder builder)
+ {
+ builder.UseMiddleware();
+ return builder;
+ }
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/System/BytesExtensions.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/System/BytesExtensions.cs
new file mode 100644
index 000000000..d1bad7915
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/System/BytesExtensions.cs
@@ -0,0 +1,16 @@
+using System.Security.Cryptography;
+
+namespace System
+{
+ internal static class BytesExtensions
+ {
+ public static byte[] Sha1(this byte[] data)
+ {
+ using (var sha = SHA1.Create())
+ {
+ var hashBytes = sha.ComputeHash(data);
+ return hashBytes;
+ }
+ }
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/System/StringExtensions.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/System/StringExtensions.cs
new file mode 100644
index 000000000..a8eb40c27
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/System/StringExtensions.cs
@@ -0,0 +1,17 @@
+using System.Security.Cryptography;
+using System.Text;
+
+namespace System
+{
+ internal static class StringExtensions
+ {
+ public static byte[] Sha1(this string str)
+ {
+ using (var sha = SHA1.Create())
+ {
+ var hashBytes = sha.ComputeHash(Encoding.ASCII.GetBytes(str));
+ return hashBytes;
+ }
+ }
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/System/Text/Json/JsonElementExtensions.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/System/Text/Json/JsonElementExtensions.cs
new file mode 100644
index 000000000..653a868ac
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChat/System/Text/Json/JsonElementExtensions.cs
@@ -0,0 +1,63 @@
+using System.Collections.Generic;
+
+namespace System.Text.Json
+{
+ internal static class JsonElementExtensions
+ {
+ public static IEnumerable GetRootStrings(this JsonDocument json, string key)
+ {
+ return json.RootElement.GetStrings(key);
+ }
+
+ public static IEnumerable GetStrings(this JsonElement json, string key)
+ {
+ var result = new List();
+
+ if (json.TryGetProperty(key, out JsonElement property) && property.ValueKind == JsonValueKind.Array)
+ {
+ foreach (var jsonProp in property.EnumerateArray())
+ {
+ result.Add(jsonProp.GetString());
+ }
+ }
+
+ return result;
+ }
+
+ public static string GetRootString(this JsonDocument json, string key, string defaultValue = "")
+ {
+ if (json.RootElement.TryGetProperty(key, out JsonElement property))
+ {
+ return property.GetString();
+ }
+ return defaultValue;
+ }
+
+ public static string GetString(this JsonElement json, string key, string defaultValue = "")
+ {
+ if (json.TryGetProperty(key, out JsonElement property))
+ {
+ return property.GetString();
+ }
+ return defaultValue;
+ }
+
+ public static int GetRootInt32(this JsonDocument json, string key, int defaultValue = 0)
+ {
+ if (json.RootElement.TryGetProperty(key, out JsonElement property) && property.TryGetInt32(out int value))
+ {
+ return value;
+ }
+ return defaultValue;
+ }
+
+ public static int GetInt32(this JsonElement json, string key, int defaultValue = 0)
+ {
+ if (json.TryGetProperty(key, out JsonElement property) && property.TryGetInt32(out int value))
+ {
+ return value;
+ }
+ return defaultValue;
+ }
+ }
+}
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChatValidator/LINGYUN.Abp.IdentityServer.WeChatValidator.csproj b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChatValidator/LINGYUN.Abp.IdentityServer.WeChatValidator.csproj
index 241c181ff..e3d311408 100644
--- a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChatValidator/LINGYUN.Abp.IdentityServer.WeChatValidator.csproj
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChatValidator/LINGYUN.Abp.IdentityServer.WeChatValidator.csproj
@@ -21,10 +21,6 @@
-
-
-
-
diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChatValidator/README.md b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChatValidator/README.md
new file mode 100644
index 000000000..8cf26f883
--- /dev/null
+++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.WeChatValidator/README.md
@@ -0,0 +1,17 @@
+# LINGYUN.Abp.IdentityServer.WeChatValidator
+
+废弃模块,模块层次不清晰,微信有多端平台,不同平台授权规则不一致
+
+#### 注意
+
+
+
+## 配置使用
+
+
+```csharp
+[DependsOn(typeof(AbpIdentityServerWeChatValidatorModule))]
+public class YouProjectModule : AbpModule
+{
+ // other
+}
diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingController.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingController.cs
index 29a68f8a1..8a8d10e50 100644
--- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingController.cs
+++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingController.cs
@@ -18,14 +18,14 @@ namespace LINGYUN.Abp.SettingManagement
}
[HttpPut]
- [Route("by-current-tenant")]
+ [Route("change-current-tenant")]
public virtual async Task SetCurrentTenantAsync(UpdateSettingsDto input)
{
await _settingAppService.SetCurrentTenantAsync(input);
}
[HttpPut]
- [Route("by-global")]
+ [Route("change-global")]
public virtual async Task SetGlobalAsync(UpdateSettingsDto input)
{
await _settingAppService.SetGlobalAsync(input);
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN.Abp.Notifications.WeChat.WeApp.csproj b/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN.Abp.Notifications.WeChat.WeApp.csproj
index b50a13b8f..d045f3ab8 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN.Abp.Notifications.WeChat.WeApp.csproj
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN.Abp.Notifications.WeChat.WeApp.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN/Abp/Notifications/WeChat/WeApp/AbpNotificationsWeChatWeAppModule.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN/Abp/Notifications/WeChat/WeApp/AbpNotificationsWeChatWeAppModule.cs
index 146da9d22..56c660407 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN/Abp/Notifications/WeChat/WeApp/AbpNotificationsWeChatWeAppModule.cs
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN/Abp/Notifications/WeChat/WeApp/AbpNotificationsWeChatWeAppModule.cs
@@ -1,13 +1,11 @@
-using LINGYUN.Abp.WeChat.Authorization;
+using LINGYUN.Abp.WeChat.MiniProgram;
using Microsoft.Extensions.DependencyInjection;
-using Polly;
-using System;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.Notifications.WeChat.WeApp
{
[DependsOn(
- typeof(AbpWeChatAuthorizationModule),
+ typeof(AbpWeChatMiniProgramModule),
typeof(AbpNotificationModule))]
public class AbpNotificationsWeChatWeAppModule : AbpModule
{
@@ -16,11 +14,6 @@ namespace LINGYUN.Abp.Notifications.WeChat.WeApp
var configuration = context.Services.GetConfiguration();
Configure(configuration.GetSection("Notifications:WeChat:WeApp"));
- // TODO:是否有必要启用重试机制?
- context.Services.AddHttpClient(WeChatWeAppNotificationSender.SendNotificationClientName)
- .AddTransientHttpErrorPolicy(builder =>
- builder.WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(Math.Pow(2, i))));
-
Configure(options =>
{
options.PublishProviders.Add();
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN/Abp/Notifications/WeChat/WeApp/WeChatWeAppNotificationPublishProvider.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN/Abp/Notifications/WeChat/WeApp/WeChatWeAppNotificationPublishProvider.cs
index 91136b562..533210a24 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN/Abp/Notifications/WeChat/WeApp/WeChatWeAppNotificationPublishProvider.cs
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN/Abp/Notifications/WeChat/WeApp/WeChatWeAppNotificationPublishProvider.cs
@@ -1,5 +1,6 @@
using LINGYUN.Abp.Notifications.WeChat.WeApp.Features;
-using LINGYUN.Abp.WeChat.Authorization;
+using LINGYUN.Abp.WeChat.MiniProgram.Messages;
+using LINGYUN.Abp.WeChat.Security.Claims;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System;
@@ -19,20 +20,16 @@ namespace LINGYUN.Abp.Notifications.WeChat.WeApp
private IFeatureChecker _featureChecker;
protected IFeatureChecker FeatureChecker => LazyGetRequiredService(ref _featureChecker);
-
- private IUserWeChatOpenIdFinder _userWeChatOpenIdFinder;
- protected IUserWeChatOpenIdFinder UserWeChatOpenIdFinder => LazyGetRequiredService(ref _userWeChatOpenIdFinder);
-
- protected IWeChatWeAppNotificationSender NotificationSender { get; }
+ protected ISubscribeMessager SubscribeMessager { get; }
protected AbpWeChatWeAppNotificationOptions Options { get; }
public WeChatWeAppNotificationPublishProvider(
IServiceProvider serviceProvider,
- IWeChatWeAppNotificationSender notificationSender,
+ ISubscribeMessager subscribeMessager,
IOptions options)
: base(serviceProvider)
{
Options = options.Value;
- NotificationSender = notificationSender;
+ SubscribeMessager = subscribeMessager;
}
protected override async Task PublishAsync(NotificationInfo notification, IEnumerable identifiers, CancellationToken cancellationToken = default)
@@ -79,22 +76,30 @@ namespace LINGYUN.Abp.Notifications.WeChat.WeApp
var weAppLang = GetOrDefault(notification.Data, "WeAppLanguage", Options.DefaultWeAppLanguage);
Logger.LogDebug($"Get wechat weapp language: {weAppLang ?? null}");
- // TODO: 如果微信端发布通知,请组装好 openid 字段在通知数据内容里面
- string weChatCode = GetOrDefault(notification.Data, AbpWeChatClaimTypes.OpenId, "");
+ var notificationData = NotificationData.ToStandardData(Options.DefaultMsgPrefix, notification.Data);
- var openId = !weChatCode.IsNullOrWhiteSpace() ? weChatCode
- : await UserWeChatOpenIdFinder.FindByUserIdAsync(identifier.UserId);
-
- var weChatWeAppNotificationData = new WeChatWeAppSendNotificationData(openId,
- templateId, redirect, weAppState, weAppLang);
+ // TODO: 如果微信端发布通知,请组装好 openid 字段在通知数据内容里面
+ string openId = GetOrDefault(notification.Data, AbpWeChatClaimTypes.OpenId, "");
- // 写入模板数据
- weChatWeAppNotificationData.WriteStandardData(NotificationData.ToStandardData(Options.DefaultMsgPrefix, notification.Data));
+ if (openId.IsNullOrWhiteSpace())
+ {
+ // 发送小程序订阅消息
+ await SubscribeMessager
+ .SendAsync(
+ identifier.UserId, templateId, redirect, weAppLang,
+ weAppState, notificationData.Properties, cancellationToken);
+ }
+ else
+ {
+ var weChatWeAppNotificationData = new SubscribeMessage(templateId, redirect, weAppState, weAppLang);
+ // 写入模板数据
+ weChatWeAppNotificationData.WriteData(notificationData.Properties);
- Logger.LogDebug($"Sending wechat weapp notification: {notification.Name}");
+ Logger.LogDebug($"Sending wechat weapp notification: {notification.Name}");
- // 发送小程序订阅消息
- await NotificationSender.SendAsync(weChatWeAppNotificationData);
+ // 发送小程序订阅消息
+ await SubscribeMessager.SendAsync(weChatWeAppNotificationData, cancellationToken);
+ }
}
protected string GetOrDefaultTemplateId(NotificationData data)
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN/Abp/Notifications/WeChat/WeApp/WeChatWeAppNotificationSender.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN/Abp/Notifications/WeChat/WeApp/WeChatWeAppNotificationSender.cs
index 7d680ff9d..43effb6d4 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN/Abp/Notifications/WeChat/WeApp/WeChatWeAppNotificationSender.cs
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.Notifications.WeChat/LINGYUN/Abp/Notifications/WeChat/WeApp/WeChatWeAppNotificationSender.cs
@@ -1,8 +1,10 @@
using LINGYUN.Abp.Features.LimitValidation;
using LINGYUN.Abp.Notifications.WeChat.WeApp.Features;
-using LINGYUN.Abp.WeChat.Authorization;
+using LINGYUN.Abp.WeChat.MiniProgram;
+using LINGYUN.Abp.WeChat.Token;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
+using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Net.Http;
@@ -11,7 +13,6 @@ using System.Threading;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.DependencyInjection;
-using Volo.Abp.Features;
using Volo.Abp.Json;
namespace LINGYUN.Abp.Notifications.WeChat.WeApp
@@ -22,15 +23,18 @@ namespace LINGYUN.Abp.Notifications.WeChat.WeApp
public ILogger Logger { get; set; }
protected IHttpClientFactory HttpClientFactory { get; }
protected IJsonSerializer JsonSerializer { get; }
+ protected AbpWeChatMiniProgramOptions MiniProgramOptions { get; }
protected IWeChatTokenProvider WeChatTokenProvider { get; }
public WeChatWeAppNotificationSender(
IJsonSerializer jsonSerializer,
IHttpClientFactory httpClientFactory,
- IWeChatTokenProvider weChatTokenProvider)
+ IWeChatTokenProvider weChatTokenProvider,
+ IOptions miniProgramOptions)
{
JsonSerializer = jsonSerializer;
HttpClientFactory = httpClientFactory;
WeChatTokenProvider = weChatTokenProvider;
+ MiniProgramOptions = miniProgramOptions.Value;
Logger = NullLogger.Instance;
}
@@ -44,7 +48,7 @@ namespace LINGYUN.Abp.Notifications.WeChat.WeApp
)]
public virtual async Task SendAsync(WeChatWeAppSendNotificationData notificationData, CancellationToken cancellationToken = default)
{
- var weChatToken = await WeChatTokenProvider.GetTokenAsync();
+ var weChatToken = await WeChatTokenProvider.GetTokenAsync(MiniProgramOptions.AppId, MiniProgramOptions.AppSecret, cancellationToken);
var requestParamters = new Dictionary
{
{ "access_token", weChatToken.AccessToken }
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN.Abp.WeChat.Authorization.csproj b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN.Abp.WeChat.Authorization.csproj
index 04eb151e7..f88288fc9 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN.Abp.WeChat.Authorization.csproj
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN.Abp.WeChat.Authorization.csproj
@@ -1,4 +1,4 @@
-
+
@@ -17,4 +17,8 @@
+
+
+
+
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/AbpWeChatAuthorizationOptions.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/AbpWeChatAuthorizationOptions.cs
index 5c059e05b..07261a52a 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/AbpWeChatAuthorizationOptions.cs
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/AbpWeChatAuthorizationOptions.cs
@@ -3,6 +3,7 @@
public class AbpWeChatAuthorizationOptions
{
public string AppId { get; set; }
+
public string AppSecret { get; set; }
}
}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/AbpWeChatAuthorizationOptionsFactory.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/AbpWeChatAuthorizationOptionsFactory.cs
new file mode 100644
index 000000000..f7bea9587
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/AbpWeChatAuthorizationOptionsFactory.cs
@@ -0,0 +1,47 @@
+using LINGYUN.Abp.WeChat.Authorization.Settings;
+using Microsoft.Extensions.Options;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.Options;
+using Volo.Abp.Settings;
+using Volo.Abp.Threading;
+
+namespace LINGYUN.Abp.WeChat.Authorization
+{
+ public class AbpWeChatAuthorizationOptionsFactory : AbpOptionsFactory
+ {
+ protected ISettingProvider SettingProvider { get; }
+
+ public AbpWeChatAuthorizationOptionsFactory(
+ ISettingProvider settingProvider,
+ IEnumerable> setups,
+ IEnumerable> postConfigures)
+ : base(setups, postConfigures)
+ {
+ SettingProvider = settingProvider;
+ }
+
+ public override AbpWeChatAuthorizationOptions Create(string name)
+ {
+ var options = base.Create(name);
+
+ OverrideOptions(options);
+
+ return options;
+ }
+
+ protected virtual void OverrideOptions(AbpWeChatAuthorizationOptions options)
+ {
+ AsyncHelper.RunSync(() => OverrideOptionsAsync(options));
+ }
+
+ protected virtual async Task OverrideOptionsAsync(AbpWeChatAuthorizationOptions options)
+ {
+ var appId = await SettingProvider.GetOrNullAsync(WeChatAuthorizationSettingNames.AppId);
+ var appSecret = await SettingProvider.GetOrNullAsync(WeChatAuthorizationSettingNames.AppSecret);
+
+ options.AppId = appId ?? options.AppId;
+ options.AppSecret = appSecret ?? options.AppSecret;
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/IUserWeChatOpenIdFinder.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/IUserWeChatOpenIdFinder.cs
deleted file mode 100644
index bc56fc43c..000000000
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/IUserWeChatOpenIdFinder.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System;
-using System.Threading.Tasks;
-
-namespace LINGYUN.Abp.WeChat.Authorization
-{
- public interface IUserWeChatOpenIdFinder
- {
- Task FindByUserIdAsync(Guid userId);
-
- Task FindByUserNameAsync(string userName);
- }
-}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/IWeChatOpenIdFinder.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/IWeChatOpenIdFinder.cs
deleted file mode 100644
index 1b548958f..000000000
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/IWeChatOpenIdFinder.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-using System.Threading.Tasks;
-
-namespace LINGYUN.Abp.WeChat.Authorization
-{
- public interface IWeChatOpenIdFinder
- {
- Task FindAsync(string code);
- }
-}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/Settings/WeChatAuthorizationSettingNames.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/Settings/WeChatAuthorizationSettingNames.cs
new file mode 100644
index 000000000..43ca975ea
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/Settings/WeChatAuthorizationSettingNames.cs
@@ -0,0 +1,11 @@
+using LINGYUN.Abp.WeChat.Settings;
+
+namespace LINGYUN.Abp.WeChat.Authorization.Settings
+{
+ public class WeChatAuthorizationSettingNames
+ {
+ private const string Prefix = WeChatSettingNames.Prefix + ".Authorization";
+ public static string AppId = Prefix + "." + nameof(AbpWeChatAuthorizationOptions.AppId);
+ public static string AppSecret = Prefix + "." + nameof(AbpWeChatAuthorizationOptions.AppSecret);
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/Settings/WeChatAuthorizationSettingProvider.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/Settings/WeChatAuthorizationSettingProvider.cs
new file mode 100644
index 000000000..5dc69f6d7
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/Settings/WeChatAuthorizationSettingProvider.cs
@@ -0,0 +1,32 @@
+using LINGYUN.Abp.WeChat.Localization;
+using Volo.Abp.Localization;
+using Volo.Abp.Settings;
+
+namespace LINGYUN.Abp.WeChat.Authorization.Settings
+{
+ public class WeChatAuthorizationSettingProvider : SettingDefinitionProvider
+ {
+ public override void Define(ISettingDefinitionContext context)
+ {
+ context.Add(
+ new SettingDefinition(
+ WeChatAuthorizationSettingNames.AppId, "",
+ L("DisplayName:WeChat.Auth.AppId"),
+ L("Description:WeChat.Auth.AppId"),
+ isVisibleToClients: true,
+ isEncrypted: true),
+ new SettingDefinition(
+ WeChatAuthorizationSettingNames.AppSecret, "",
+ L("DisplayName:WeChat.Auth.AppSecret"),
+ L("Description:WeChat.Auth.AppSecret"),
+ isVisibleToClients: true,
+ isEncrypted: true)
+ );
+ }
+
+ protected ILocalizableString L(string name)
+ {
+ return LocalizableString.Create(name);
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/README.md b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/README.md
new file mode 100644
index 000000000..f01810464
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/README.md
@@ -0,0 +1,17 @@
+# LINGYUN.Abp.WeChat.Authorization
+
+废弃模块,模块层次不清晰,微信有多端平台,不同平台授权规则不一致
+
+#### 注意
+
+
+
+## 配置使用
+
+
+```csharp
+[DependsOn(typeof(AbpWeChatAuthorizationModule))]
+public class YouProjectModule : AbpModule
+{
+ // other
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN.Abp.WeChat.MiniProgram.csproj b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN.Abp.WeChat.MiniProgram.csproj
new file mode 100644
index 000000000..45d790443
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN.Abp.WeChat.MiniProgram.csproj
@@ -0,0 +1,24 @@
+
+
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/AbpWeChatMiniProgramConsts.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/AbpWeChatMiniProgramConsts.cs
new file mode 100644
index 000000000..bed3fd9cb
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/AbpWeChatMiniProgramConsts.cs
@@ -0,0 +1,21 @@
+namespace LINGYUN.Abp.WeChat.MiniProgram
+{
+ public class AbpWeChatMiniProgramConsts
+ {
+ ///
+ /// 全局对应的Provider名称
+ ///
+ public static string ProviderKey { get; set; } = "WeChat.MiniProgram";
+
+ ///
+ /// 微信小程序授权类型
+ ///
+ public static string GrantType { get; set; } = "wx-mp";
+
+ ///
+ /// 微信小程序授权方法名称
+ ///
+ public static string AuthenticationMethod { get; set; } = "wma";
+ public static string HttpClient { get; set; } = "Abp.WeChat.MiniProgram";
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/AbpWeChatMiniProgramModule.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/AbpWeChatMiniProgramModule.cs
new file mode 100644
index 000000000..16c66302a
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/AbpWeChatMiniProgramModule.cs
@@ -0,0 +1,46 @@
+using LINGYUN.Abp.WeChat.Localization;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection.Extensions;
+using Microsoft.Extensions.Options;
+using System;
+using Volo.Abp.Localization;
+using Volo.Abp.Modularity;
+using Volo.Abp.Settings;
+using Volo.Abp.VirtualFileSystem;
+
+namespace LINGYUN.Abp.WeChat.MiniProgram
+{
+ [DependsOn(
+ typeof(AbpWeChatModule),
+ typeof(AbpSettingsModule))]
+ public class AbpWeChatMiniProgramModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.FileSets.AddEmbedded();
+ });
+
+ Configure(options =>
+ {
+ options.Resources
+ .Get()
+ .AddVirtualJson("/LINGYUN/Abp/WeChat/MiniProgram/Localization/Resources");
+ });
+
+ context.Services.AddHttpClient(AbpWeChatMiniProgramConsts.HttpClient, options =>
+ {
+ options.BaseAddress = new Uri("https://api.weixin.qq.com");
+ });
+
+ AddAbpWeChatMiniProgramOptionsFactory(context.Services);
+ }
+
+ private static void AddAbpWeChatMiniProgramOptionsFactory(IServiceCollection services)
+ {
+ services.Replace(ServiceDescriptor.Transient, AbpWeChatMiniProgramOptionsFactory>());
+ services.Replace(ServiceDescriptor.Scoped, OptionsManager>());
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/AbpWeChatMiniProgramOptions.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/AbpWeChatMiniProgramOptions.cs
new file mode 100644
index 000000000..b7fd0df83
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/AbpWeChatMiniProgramOptions.cs
@@ -0,0 +1,22 @@
+namespace LINGYUN.Abp.WeChat.MiniProgram
+{
+ public class AbpWeChatMiniProgramOptions
+ {
+ ///
+ /// 小程序AppId
+ ///
+ public string AppId { get; set; }
+ ///
+ /// 小程序AppSecret
+ ///
+ public string AppSecret { get; set; }
+ ///
+ /// 小程序消息解密Token
+ ///
+ public string Token { get; set; }
+ ///
+ /// 小程序消息解密AESKey
+ ///
+ public string EncodingAESKey { get; set; }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/AbpWeChatMiniProgramOptionsFactory.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/AbpWeChatMiniProgramOptionsFactory.cs
new file mode 100644
index 000000000..52cbc0b89
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/AbpWeChatMiniProgramOptionsFactory.cs
@@ -0,0 +1,50 @@
+using LINGYUN.Abp.WeChat.MiniProgram.Settings;
+using Microsoft.Extensions.Options;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.Options;
+using Volo.Abp.Settings;
+using Volo.Abp.Threading;
+
+namespace LINGYUN.Abp.WeChat.MiniProgram
+{
+ public class AbpWeChatMiniProgramOptionsFactory : AbpOptionsFactory
+ {
+ protected ISettingProvider SettingProvider { get; }
+ public AbpWeChatMiniProgramOptionsFactory(
+ ISettingProvider settingProvider,
+ IEnumerable> setups,
+ IEnumerable> postConfigures)
+ : base(setups, postConfigures)
+ {
+ SettingProvider = settingProvider;
+ }
+
+ public override AbpWeChatMiniProgramOptions Create(string name)
+ {
+ var options = base.Create(name);
+
+ OverrideOptions(options);
+
+ return options;
+ }
+
+ protected virtual void OverrideOptions(AbpWeChatMiniProgramOptions options)
+ {
+ AsyncHelper.RunSync(() => OverrideOptionsAsync(options));
+ }
+
+ protected virtual async Task OverrideOptionsAsync(AbpWeChatMiniProgramOptions options)
+ {
+ var appId = await SettingProvider.GetOrNullAsync(WeChatMiniProgramSettingNames.AppId);
+ var appSecret = await SettingProvider.GetOrNullAsync(WeChatMiniProgramSettingNames.AppSecret);
+ var token = await SettingProvider.GetOrNullAsync(WeChatMiniProgramSettingNames.Token);
+ var aesKey = await SettingProvider.GetOrNullAsync(WeChatMiniProgramSettingNames.EncodingAESKey);
+
+ options.AppId = appId ?? options.AppId;
+ options.AppSecret = appSecret ?? options.AppSecret;
+ options.Token = token ?? options.Token;
+ options.EncodingAESKey = aesKey ?? options.EncodingAESKey;
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Localization/Resources/en.json b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Localization/Resources/en.json
new file mode 100644
index 000000000..fee22225d
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Localization/Resources/en.json
@@ -0,0 +1,15 @@
+{
+ "culture": "en",
+ "texts": {
+ "DisplayName:WeChat.MiniProgram": "WeChat Mini Program",
+ "Description:WeChat.MiniProgram": "WeChat Mini Program",
+ "DisplayName:WeChat.MiniProgram.AppId": "AppId",
+ "Description:WeChat.MiniProgram.AppId": "AppId,See:https://developers.weixin.qq.com/miniprogram/dev/framework/",
+ "DisplayName:WeChat.MiniProgram.AppSecret": "App Secret",
+ "Description:WeChat.MiniProgram.AppSecret": "App Secret,See:https://developers.weixin.qq.com/miniprogram/dev/framework/",
+ "DisplayName:WeChat.MiniProgram.Token": "Token",
+ "Description:WeChat.MiniProgram.Token": "Token,See:https://developers.weixin.qq.com/miniprogram/dev/framework/",
+ "DisplayName:WeChat.MiniProgram.EncodingAESKey": "Encoding AES Key",
+ "Description:WeChat.MiniProgram.EncodingAESKey": "Encoding AES Key,See:https://developers.weixin.qq.com/miniprogram/dev/framework/"
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Localization/Resources/zh-Hans.json b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Localization/Resources/zh-Hans.json
new file mode 100644
index 000000000..6fe42fc38
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Localization/Resources/zh-Hans.json
@@ -0,0 +1,15 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ "DisplayName:WeChat.MiniProgram": "微信小程序",
+ "Description:WeChat.MiniProgram": "微信小程序",
+ "DisplayName:WeChat.MiniProgram.AppId": "小程序AppId",
+ "Description:WeChat.MiniProgram.AppId": "微信小程序AppId,详情见:https://developers.weixin.qq.com/miniprogram/dev/framework/",
+ "DisplayName:WeChat.MiniProgram.AppSecret": "小程序AppSecret",
+ "Description:WeChat.MiniProgram.AppSecret": "微信小程序AppSecret,详情见:https://developers.weixin.qq.com/miniprogram/dev/framework/",
+ "DisplayName:WeChat.MiniProgram.Token": "小程序Token",
+ "Description:WeChat.MiniProgram.Token": "微信小程序Token,详情见:https://developers.weixin.qq.com/miniprogram/dev/framework/",
+ "DisplayName:WeChat.MiniProgram.EncodingAESKey": "小程序EncodingAESKey",
+ "Description:WeChat.MiniProgram.EncodingAESKey": "微信小程序EncodingAESKey,详情见:https://developers.weixin.qq.com/miniprogram/dev/framework/"
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Messages/ISubscribeMessager.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Messages/ISubscribeMessager.cs
new file mode 100644
index 000000000..b9e8e5b49
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Messages/ISubscribeMessager.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace LINGYUN.Abp.WeChat.MiniProgram.Messages
+{
+ ///
+ /// 小程序模板消息
+ /// 详情: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
+ ///
+ ///
+ /// 暂时仅实现发送订阅消息
+ ///
+ public interface ISubscribeMessager
+ {
+ ///
+ /// 发送订阅消息
+ ///
+ ///
+ ///
+ ///
+ Task SendAsync(SubscribeMessage message, CancellationToken cancellation = default);
+ ///
+ /// 发送订阅消息
+ ///
+ /// 用户
+ /// 模板
+ /// 跳转页面
+ /// 语言
+ /// 类型
+ /// 数据
+ ///
+ ///
+ Task SendAsync(
+ Guid toUser,
+ string templateId,
+ string page = "",
+ string lang = "zh_CN",
+ string state = "formal",
+ Dictionary data = null,
+ CancellationToken cancellation = default);
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Messages/Response.SubscribeMessage.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Messages/Response.SubscribeMessage.cs
new file mode 100644
index 000000000..eb1dd58a5
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Messages/Response.SubscribeMessage.cs
@@ -0,0 +1,24 @@
+using Newtonsoft.Json;
+using Volo.Abp;
+
+namespace LINGYUN.Abp.WeChat.MiniProgram.Messages
+{
+ public class SubscribeMessageResponse
+ {
+ [JsonProperty("errcode")]
+ public int ErrorCode { get; set; }
+
+ [JsonProperty("errmsg")]
+ public string ErrorMessage { get; set; }
+
+ public bool IsSuccessed => ErrorCode == 0;
+
+ public void ThrowIfNotSuccess()
+ {
+ if (ErrorCode != 0)
+ {
+ throw new AbpException($"Send wechat weapp notification error:{ErrorMessage}");
+ }
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Messages/SubscribeMessage.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Messages/SubscribeMessage.cs
new file mode 100644
index 000000000..36d27397c
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Messages/SubscribeMessage.cs
@@ -0,0 +1,106 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace LINGYUN.Abp.WeChat.MiniProgram.Messages
+{
+ public class SubscribeMessage
+ {
+ ///
+ /// 接收者(用户)的 openid
+ ///
+ [JsonProperty("touser")]
+ public string ToUser { get; set; }
+ ///
+ /// 所需下发的订阅模板id
+ ///
+ [JsonProperty("template_id")]
+ public string TemplateId { get; set; }
+ ///
+ /// 点击模板卡片后的跳转页面,仅限本小程序内的页面。
+ /// 支持带参数,(示例index?foo=bar)。
+ /// 该字段不填则模板无跳转
+ ///
+ [JsonProperty("page")]
+ public string Page { get; set; }
+ ///
+ /// 跳转小程序类型:
+ /// developer为开发版;trial为体验版;formal为正式版;
+ /// 默认为正式版
+ ///
+ [JsonProperty("miniprogram_state")]
+ public string MiniProgramState { get; set; }
+ ///
+ /// 进入小程序查看”的语言类型,
+ /// 支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),
+ /// 默认为zh_CN
+ ///
+ [JsonProperty("lang")]
+ public string Lang { get; set; } = "zh_CN";
+ ///
+ /// 模板内容,
+ /// 格式形如 { "key1": { "value": any }, "key2": { "value": any } }
+ ///
+ [JsonProperty("data")]
+ public Dictionary Data { get; set; } = new Dictionary();
+
+ public SubscribeMessage() { }
+ public SubscribeMessage(
+ string openId,
+ string templateId,
+ string redirectPage = "",
+ string state = "formal",
+ string miniLang = "zh_CN")
+ {
+ ToUser = openId;
+ TemplateId = templateId;
+ Page = redirectPage;
+ MiniProgramState = state;
+ Lang = miniLang;
+ }
+
+ public SubscribeMessage WriteData(string prefix, string key, object value)
+ {
+ // 只截取符合标记的数据
+ if (key.StartsWith(prefix))
+ {
+ key = key.Replace(prefix, "");
+ if (!Data.ContainsKey(key))
+ {
+ Data.Add(key, new MessageData(value));
+ }
+ }
+ return this;
+ }
+
+ public SubscribeMessage WriteData(string prefix, IDictionary setData)
+ {
+ foreach (var kv in setData)
+ {
+ WriteData(prefix, kv.Key, kv.Value);
+ }
+ return this;
+ }
+
+ public SubscribeMessage WriteData(IDictionary setData)
+ {
+ foreach (var kv in setData)
+ {
+ if (!Data.ContainsKey(kv.Key))
+ {
+ Data.Add(kv.Key, new MessageData(kv.Value));
+ }
+ }
+ return this;
+ }
+ }
+
+ public class MessageData
+ {
+ public object Value { get; }
+
+ public MessageData(object value)
+ {
+ Value = value;
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Messages/SubscribeMessager.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Messages/SubscribeMessager.cs
new file mode 100644
index 000000000..d59adb134
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Messages/SubscribeMessager.cs
@@ -0,0 +1,119 @@
+using LINGYUN.Abp.WeChat.OpenId;
+using LINGYUN.Abp.WeChat.Token;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Abstractions;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.Net.Http;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Volo.Abp;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Json;
+
+namespace LINGYUN.Abp.WeChat.MiniProgram.Messages
+{
+ public class SubscribeMessager : ISubscribeMessager, ITransientDependency
+ {
+ public ILogger Logger { get; set; }
+ protected IHttpClientFactory HttpClientFactory { get; }
+ protected IJsonSerializer JsonSerializer { get; }
+ protected AbpWeChatMiniProgramOptions MiniProgramOptions { get; }
+ protected IWeChatTokenProvider WeChatTokenProvider { get; }
+ protected IUserWeChatOpenIdFinder UserWeChatOpenIdFinder { get; }
+ public SubscribeMessager(
+ IJsonSerializer jsonSerializer,
+ IHttpClientFactory httpClientFactory,
+ IWeChatTokenProvider weChatTokenProvider,
+ IUserWeChatOpenIdFinder userWeChatOpenIdFinder,
+ IOptions miniProgramOptions)
+ {
+ JsonSerializer = jsonSerializer;
+ HttpClientFactory = httpClientFactory;
+ WeChatTokenProvider = weChatTokenProvider;
+ UserWeChatOpenIdFinder = userWeChatOpenIdFinder;
+ MiniProgramOptions = miniProgramOptions.Value;
+
+ Logger = NullLogger.Instance;
+ }
+
+ public virtual async Task SendAsync(
+ Guid toUser,
+ string templateId,
+ string page = "",
+ string lang = "zh_CN",
+ string state = "formal",
+ Dictionary data = null,
+ CancellationToken cancellation = default)
+ {
+ var openId = await UserWeChatOpenIdFinder.FindByUserIdAsync(toUser, AbpWeChatMiniProgramConsts.ProviderKey);
+ if (openId.IsNullOrWhiteSpace())
+ {
+ Logger.LogWarning("Can not found openId, Unable to send WeChat message!");
+ return;
+ }
+ var messageData = new SubscribeMessage(openId, templateId, page, state, lang);
+ if (data != null)
+ {
+ messageData.WriteData(data);
+ }
+ await SendAsync(messageData, cancellation);
+ }
+
+ public virtual async Task SendAsync(SubscribeMessage message, CancellationToken cancellationToken = default)
+ {
+ var weChatToken = await WeChatTokenProvider.GetTokenAsync(MiniProgramOptions.AppId, MiniProgramOptions.AppSecret, cancellationToken);
+ var requestParamters = new Dictionary
+ {
+ { "access_token", weChatToken.AccessToken }
+ };
+ var weChatSendNotificationUrl = "https://api.weixin.qq.com";
+ var weChatSendNotificationPath = "/cgi-bin/message/subscribe/send";
+ var requestUrl = BuildRequestUrl(weChatSendNotificationUrl, weChatSendNotificationPath, requestParamters);
+ var responseContent = await MakeRequestAndGetResultAsync(requestUrl, message, cancellationToken);
+ var response = JsonSerializer.Deserialize(responseContent);
+
+ if (!response.IsSuccessed)
+ {
+ Logger.LogWarning("Send wechat we app subscribe message failed");
+ Logger.LogWarning($"Error code: {response.ErrorCode}, message: {response.ErrorMessage}");
+ }
+ }
+
+ protected virtual async Task MakeRequestAndGetResultAsync(string url, SubscribeMessage message, CancellationToken cancellationToken = default)
+ {
+ var client = HttpClientFactory.CreateClient(AbpWeChatMiniProgramConsts.HttpClient);
+ var sendDataContent = JsonSerializer.Serialize(message);
+ var requestContent = new StringContent(sendDataContent);
+ var requestMessage = new HttpRequestMessage(HttpMethod.Post, url)
+ {
+ Content = requestContent
+ };
+
+ var response = await client.SendAsync(requestMessage, cancellationToken);
+ if (!response.IsSuccessStatusCode)
+ {
+ throw new AbpException($"WeChat send subscribe message http request service returns error! HttpStatusCode: {response.StatusCode}, ReasonPhrase: {response.ReasonPhrase}");
+ }
+ var resultContent = await response.Content.ReadAsStringAsync();
+
+ return resultContent;
+ }
+
+ protected virtual string BuildRequestUrl(string uri, string path, IDictionary paramters)
+ {
+ var requestUrlBuilder = new StringBuilder(128);
+ requestUrlBuilder.Append(uri);
+ requestUrlBuilder.Append(path).Append("?");
+ foreach (var paramter in paramters)
+ {
+ requestUrlBuilder.AppendFormat("{0}={1}", paramter.Key, paramter.Value);
+ requestUrlBuilder.Append("&");
+ }
+ requestUrlBuilder.Remove(requestUrlBuilder.Length - 1, 1);
+ return requestUrlBuilder.ToString();
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Settings/WeChatMiniProgramSettingDefinitionProvider.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Settings/WeChatMiniProgramSettingDefinitionProvider.cs
new file mode 100644
index 000000000..f052c27e6
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Settings/WeChatMiniProgramSettingDefinitionProvider.cs
@@ -0,0 +1,44 @@
+using LINGYUN.Abp.WeChat.Localization;
+using Volo.Abp.Localization;
+using Volo.Abp.Settings;
+
+namespace LINGYUN.Abp.WeChat.MiniProgram.Settings
+{
+ public class WeChatMiniProgramSettingDefinitionProvider : SettingDefinitionProvider
+ {
+ public override void Define(ISettingDefinitionContext context)
+ {
+ context.Add(
+ new SettingDefinition(
+ WeChatMiniProgramSettingNames.AppId, "",
+ L("DisplayName:WeChat.MiniProgram.AppId"),
+ L("Description:WeChat.MiniProgram.AppId"),
+ isVisibleToClients: true,
+ isEncrypted: true),
+ new SettingDefinition(
+ WeChatMiniProgramSettingNames.AppSecret, "",
+ L("DisplayName:WeChat.MiniProgram.AppSecret"),
+ L("Description:WeChat.MiniProgram.AppSecret"),
+ isVisibleToClients: true,
+ isEncrypted: true),
+ new SettingDefinition(
+ WeChatMiniProgramSettingNames.Token, "",
+ L("DisplayName:WeChat.MiniProgram.Token"),
+ L("Description:WeChat.MiniProgram.Token"),
+ isVisibleToClients: true,
+ isEncrypted: true),
+ new SettingDefinition(
+ WeChatMiniProgramSettingNames.EncodingAESKey, "",
+ L("DisplayName:WeChat.MiniProgram.EncodingAESKey"),
+ L("Description:WeChat.MiniProgram.EncodingAESKey"),
+ isVisibleToClients: true,
+ isEncrypted: true)
+ );
+ }
+
+ protected ILocalizableString L(string name)
+ {
+ return LocalizableString.Create(name);
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Settings/WeChatMiniProgramSettingNames.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Settings/WeChatMiniProgramSettingNames.cs
new file mode 100644
index 000000000..65275d510
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/LINGYUN/Abp/WeChat/MiniProgram/Settings/WeChatMiniProgramSettingNames.cs
@@ -0,0 +1,14 @@
+using LINGYUN.Abp.WeChat.Settings;
+
+namespace LINGYUN.Abp.WeChat.MiniProgram.Settings
+{
+ public class WeChatMiniProgramSettingNames
+ {
+ private const string Prefix = WeChatSettingNames.Prefix + ".MiniProgram";
+
+ public static string AppId = Prefix + "." + nameof(AbpWeChatMiniProgramOptions.AppId);
+ public static string AppSecret = Prefix + "." + nameof(AbpWeChatMiniProgramOptions.AppSecret);
+ public static string Token = Prefix + "." + nameof(AbpWeChatMiniProgramOptions.Token);
+ public static string EncodingAESKey = Prefix + "." + nameof(AbpWeChatMiniProgramOptions.EncodingAESKey);
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/README.md b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/README.md
new file mode 100644
index 000000000..9a399fde7
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.MiniProgram/README.md
@@ -0,0 +1,20 @@
+# LINGYUN.Abp.WeChat.MiniProgram
+
+微信小程序SDK集成,考虑是否需要集成[Senparc.Weixin SDK](https://github.com/JeffreySu/WeiXinMPSDK)
+
+大部分重写的模块都和官方模块名称保持一致,通过命名空间区分,主要是只改写了一小部分或者增加额外的功能
+如果大部分模块代码都重写,或者完全就是扩展模块,才会定义自己的名字
+
+#### 注意
+
+
+
+## 配置使用
+
+
+```csharp
+[DependsOn(typeof(AbpWeChatMiniProgramModule))]
+public class YouProjectModule : AbpModule
+{
+ // other
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN.Abp.WeChat.Official.csproj b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN.Abp.WeChat.Official.csproj
new file mode 100644
index 000000000..adcba4b4b
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN.Abp.WeChat.Official.csproj
@@ -0,0 +1,24 @@
+
+
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialConsts.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialConsts.cs
new file mode 100644
index 000000000..03d52d33e
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialConsts.cs
@@ -0,0 +1,22 @@
+namespace LINGYUN.Abp.WeChat.Official
+{
+ public class AbpWeChatOfficialConsts
+ {
+ ///
+ /// 微信公众号全局对应的Provider名称
+ ///
+ public static string ProviderKey { get; set; } = "WeChat.Official";
+
+ ///
+ /// 微信公众平台授权类型
+ ///
+ public static string GrantType { get; set; } = "wx-op";
+
+ ///
+ /// 微信公众平台授权方法名称
+ ///
+ public static string AuthenticationMethod { get; set; } = "woa";
+
+ public static string HttpClient { get; set; } = "Abp.WeChat.Official";
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialModule.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialModule.cs
new file mode 100644
index 000000000..70e7804c4
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialModule.cs
@@ -0,0 +1,38 @@
+using LINGYUN.Abp.WeChat.Localization;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection.Extensions;
+using Microsoft.Extensions.Options;
+using Volo.Abp.Localization;
+using Volo.Abp.Modularity;
+using Volo.Abp.VirtualFileSystem;
+
+namespace LINGYUN.Abp.WeChat.Official
+{
+ [DependsOn(
+ typeof(AbpWeChatModule))]
+ public class AbpWeChatOfficialModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.FileSets.AddEmbedded();
+ });
+
+ Configure(options =>
+ {
+ options.Resources
+ .Get()
+ .AddVirtualJson("/LINGYUN/Abp/WeChat/Official/Localization/Resources");
+ });
+
+ AddAbpWeChatOfficialOptionsFactory(context.Services);
+ }
+
+ private static void AddAbpWeChatOfficialOptionsFactory(IServiceCollection services)
+ {
+ services.Replace(ServiceDescriptor.Transient, AbpWeChatOfficialOptionsFactory>());
+ services.Replace(ServiceDescriptor.Scoped, OptionsManager>());
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialOptions.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialOptions.cs
new file mode 100644
index 000000000..628cd7733
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialOptions.cs
@@ -0,0 +1,26 @@
+namespace LINGYUN.Abp.WeChat.Official
+{
+ public class AbpWeChatOfficialOptions
+ {
+ ///
+ /// 公众号服务器消息Url
+ ///
+ public string Url { get; set; }
+ ///
+ /// 公众号AppId
+ ///
+ public string AppId { get; set; }
+ ///
+ /// 公众号AppSecret
+ ///
+ public string AppSecret { get; set; }
+ ///
+ /// 公众号消息解密Token
+ ///
+ public string Token { get; set; }
+ ///
+ /// 公众号消息解密AESKey
+ ///
+ public string EncodingAESKey { get; set; }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialOptionsFactory.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialOptionsFactory.cs
new file mode 100644
index 000000000..ecc91073a
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialOptionsFactory.cs
@@ -0,0 +1,52 @@
+using LINGYUN.Abp.WeChat.Official.Settings;
+using Microsoft.Extensions.Options;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.Options;
+using Volo.Abp.Settings;
+using Volo.Abp.Threading;
+
+namespace LINGYUN.Abp.WeChat.Official
+{
+ public class AbpWeChatOfficialOptionsFactory : AbpOptionsFactory
+ {
+ protected ISettingProvider SettingProvider { get; }
+ public AbpWeChatOfficialOptionsFactory(
+ ISettingProvider settingProvider,
+ IEnumerable> setups,
+ IEnumerable> postConfigures)
+ : base(setups, postConfigures)
+ {
+ SettingProvider = settingProvider;
+ }
+
+ public override AbpWeChatOfficialOptions Create(string name)
+ {
+ var options = base.Create(name);
+
+ OverrideOptions(options);
+
+ return options;
+ }
+
+ protected virtual void OverrideOptions(AbpWeChatOfficialOptions options)
+ {
+ AsyncHelper.RunSync(() => OverrideOptionsAsync(options));
+ }
+
+ protected virtual async Task OverrideOptionsAsync(AbpWeChatOfficialOptions options)
+ {
+ var appId = await SettingProvider.GetOrNullAsync(WeChatOfficialSettingNames.AppId);
+ var appSecret = await SettingProvider.GetOrNullAsync(WeChatOfficialSettingNames.AppSecret);
+ var url = await SettingProvider.GetOrNullAsync(WeChatOfficialSettingNames.Url);
+ var token = await SettingProvider.GetOrNullAsync(WeChatOfficialSettingNames.Token);
+ var aesKey = await SettingProvider.GetOrNullAsync(WeChatOfficialSettingNames.EncodingAESKey);
+
+ options.AppId = appId ?? options.AppId;
+ options.AppSecret = appSecret ?? options.AppSecret;
+ options.Url = url ?? options.Url;
+ options.Token = token ?? options.Token;
+ options.EncodingAESKey = aesKey ?? options.EncodingAESKey;
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Localization/Resources/en.json b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Localization/Resources/en.json
new file mode 100644
index 000000000..5d08c9550
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Localization/Resources/en.json
@@ -0,0 +1,17 @@
+{
+ "culture": "en",
+ "texts": {
+ "DisplayName:WeChat.Official": "WeChat Official",
+ "Description:WeChat.Official": "WeChat Official",
+ "DisplayName:WeChat.Official.AppId": "AppId",
+ "Description:WeChat.Official.AppId": "AppId,See:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html",
+ "DisplayName:WeChat.Official.AppSecret": "App Secret",
+ "Description:WeChat.Official.AppSecret": "App Secret,See:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html",
+ "DisplayName:WeChat.Official.Url": "Url",
+ "Description:WeChat.Official.Url": "Url,See:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html",
+ "DisplayName:WeChat.Official.Token": "Token",
+ "Description:WeChat.Official.Token": "Token,See:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html",
+ "DisplayName:WeChat.Official.EncodingAESKey": "Encoding AES Key",
+ "Description:WeChat.Official.EncodingAESKey": "Encoding AES Key,See:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html"
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Localization/Resources/zh-Hans.json b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Localization/Resources/zh-Hans.json
new file mode 100644
index 000000000..e133623c2
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Localization/Resources/zh-Hans.json
@@ -0,0 +1,17 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ "DisplayName:WeChat.Official": "微信公众号",
+ "Description:WeChat.Official": "微信公众号",
+ "DisplayName:WeChat.Official.AppId": "公众号AppId",
+ "Description:WeChat.Official.AppId": "微信公众号AppId,详情见:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html",
+ "DisplayName:WeChat.Official.AppSecret": "公众号AppSecret",
+ "Description:WeChat.Official.AppSecret": "微信公众号AppSecret,详情见:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html",
+ "DisplayName:WeChat.Official.Url": "公众号Url",
+ "Description:WeChat.Official.Url": "微信公众号Url,详情见:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html",
+ "DisplayName:WeChat.Official.Token": "公众号Token",
+ "Description:WeChat.Official.Token": "微信公众号Token,详情见:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html",
+ "DisplayName:WeChat.Official.EncodingAESKey": "公众号EncodingAESKey",
+ "Description:WeChat.Official.EncodingAESKey": "微信公众号EncodingAESKey,详情见:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html"
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Settings/WeChatOfficialSettingDefinitionProvider.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Settings/WeChatOfficialSettingDefinitionProvider.cs
new file mode 100644
index 000000000..c257e9987
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Settings/WeChatOfficialSettingDefinitionProvider.cs
@@ -0,0 +1,50 @@
+using LINGYUN.Abp.WeChat.Localization;
+using Volo.Abp.Localization;
+using Volo.Abp.Settings;
+
+namespace LINGYUN.Abp.WeChat.Official.Settings
+{
+ public class WeChatOfficialSettingDefinitionProvider : SettingDefinitionProvider
+ {
+ public override void Define(ISettingDefinitionContext context)
+ {
+ context.Add(
+ new SettingDefinition(
+ WeChatOfficialSettingNames.AppId, "",
+ L("DisplayName:WeChat.Official.AppId"),
+ L("Description:WeChat.Official.AppId"),
+ isVisibleToClients: true,
+ isEncrypted: true),
+ new SettingDefinition(
+ WeChatOfficialSettingNames.AppSecret, "",
+ L("DisplayName:WeChat.Official.AppSecret"),
+ L("Description:WeChat.Official.AppSecret"),
+ isVisibleToClients: true,
+ isEncrypted: true),
+ new SettingDefinition(
+ WeChatOfficialSettingNames.Url, "",
+ L("DisplayName:WeChat.Official.Url"),
+ L("Description:WeChat.Official.Url"),
+ isVisibleToClients: true,
+ isEncrypted: false),
+ new SettingDefinition(
+ WeChatOfficialSettingNames.Token, "",
+ L("DisplayName:WeChat.Official.Token"),
+ L("Description:WeChat.Official.Token"),
+ isVisibleToClients: true,
+ isEncrypted: true),
+ new SettingDefinition(
+ WeChatOfficialSettingNames.EncodingAESKey, "",
+ L("DisplayName:WeChat.Official.EncodingAESKey"),
+ L("Description:WeChat.Official.EncodingAESKey"),
+ isVisibleToClients: true,
+ isEncrypted: true)
+ );
+ }
+
+ protected ILocalizableString L(string name)
+ {
+ return LocalizableString.Create(name);
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Settings/WeChatOfficialSettingNames.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Settings/WeChatOfficialSettingNames.cs
new file mode 100644
index 000000000..9c20f0481
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Settings/WeChatOfficialSettingNames.cs
@@ -0,0 +1,15 @@
+using LINGYUN.Abp.WeChat.Settings;
+
+namespace LINGYUN.Abp.WeChat.Official.Settings
+{
+ public class WeChatOfficialSettingNames
+ {
+ private const string Prefix = WeChatSettingNames.Prefix + ".Official";
+
+ public static string AppId = Prefix + "." + nameof(AbpWeChatOfficialOptions.AppId);
+ public static string AppSecret = Prefix + "." + nameof(AbpWeChatOfficialOptions.AppSecret);
+ public static string Url = Prefix + "." + nameof(AbpWeChatOfficialOptions.Url);
+ public static string Token = Prefix + "." + nameof(AbpWeChatOfficialOptions.Token);
+ public static string EncodingAESKey = Prefix + "." + nameof(AbpWeChatOfficialOptions.EncodingAESKey);
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/README.md b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/README.md
new file mode 100644
index 000000000..bf1c03302
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Official/README.md
@@ -0,0 +1,20 @@
+# LINGYUN.Abp.WeChat.Official
+
+微信公众号SDK集成,考虑是否需要集成[Senparc.Weixin SDK](https://github.com/JeffreySu/WeiXinMPSDK)
+
+大部分重写的模块都和官方模块名称保持一致,通过命名空间区分,主要是只改写了一小部分或者增加额外的功能
+如果大部分模块代码都重写,或者完全就是扩展模块,才会定义自己的名字
+
+#### 注意
+
+
+
+## 配置使用
+
+
+```csharp
+[DependsOn(typeof(AbpWeChatOfficialModule))]
+public class YouProjectModule : AbpModule
+{
+ // other
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN.Abp.WeChat.SettingManagement.csproj b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN.Abp.WeChat.SettingManagement.csproj
new file mode 100644
index 000000000..7276d2b93
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN.Abp.WeChat.SettingManagement.csproj
@@ -0,0 +1,31 @@
+
+
+
+
+
+ netcoreapp3.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/AbpWeChatSettingManagementModule.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/AbpWeChatSettingManagementModule.cs
new file mode 100644
index 000000000..42f30a7e5
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/AbpWeChatSettingManagementModule.cs
@@ -0,0 +1,51 @@
+using LINGYUN.Abp.WeChat.Localization;
+using LINGYUN.Abp.WeChat.MiniProgram;
+using LINGYUN.Abp.WeChat.Official;
+using Localization.Resources.AbpUi;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.AspNetCore.Mvc;
+using Volo.Abp.Localization;
+using Volo.Abp.Modularity;
+using Volo.Abp.VirtualFileSystem;
+
+namespace LINGYUN.Abp.WeChat.SettingManagement
+{
+ [DependsOn(
+ typeof(AbpWeChatOfficialModule),
+ typeof(AbpWeChatMiniProgramModule),
+ typeof(AbpAspNetCoreMvcModule))]
+ public class AbpWeChatSettingManagementModule : AbpModule
+ {
+ public override void PreConfigureServices(ServiceConfigurationContext context)
+ {
+ PreConfigure(mvcBuilder =>
+ {
+ mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpWeChatSettingManagementModule).Assembly);
+ });
+ }
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.FileSets.AddEmbedded();
+ });
+
+ Configure(options =>
+ {
+ options.Resources
+ .Get()
+ .AddVirtualJson("/LINGYUN/Abp/WeChat/SettingManagement/Localization/Resources");
+ });
+
+ Configure(options =>
+ {
+ options.Resources
+ .Get()
+ .AddBaseTypes(
+ typeof(AbpUiResource)
+ );
+ });
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/IWeChatSettingAppService.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/IWeChatSettingAppService.cs
new file mode 100644
index 000000000..3d76a7f3e
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/IWeChatSettingAppService.cs
@@ -0,0 +1,13 @@
+using LINGYUN.Abp.SettingManagement;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+
+namespace LINGYUN.Abp.WeChat.SettingManagement
+{
+ public interface IWeChatSettingAppService
+ {
+ Task> GetAllForGlobalAsync();
+
+ Task> GetAllForCurrentTenantAsync();
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/Localization/Resources/en.json b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/Localization/Resources/en.json
new file mode 100644
index 000000000..b7cb9b41e
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/Localization/Resources/en.json
@@ -0,0 +1,7 @@
+{
+ "culture": "en",
+ "texts": {
+ "Permission:WeChat.Official": "Official",
+ "Permission:WeChat.MiniProgram": "Mini Program"
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/Localization/Resources/zh-Hans.json b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/Localization/Resources/zh-Hans.json
new file mode 100644
index 000000000..b413b66d6
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/Localization/Resources/zh-Hans.json
@@ -0,0 +1,7 @@
+{
+ "culture": "zh-Hans",
+ "texts": {
+ "Permission:WeChat.Official": "公众平台",
+ "Permission:WeChat.MiniProgram": "小程序"
+ }
+}
\ No newline at end of file
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingAppService.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingAppService.cs
new file mode 100644
index 000000000..fcc80fe8b
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingAppService.cs
@@ -0,0 +1,116 @@
+using LINGYUN.Abp.SettingManagement;
+using LINGYUN.Abp.WeChat.Localization;
+using LINGYUN.Abp.WeChat.MiniProgram.Settings;
+using LINGYUN.Abp.WeChat.Official.Settings;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Application.Services;
+using Volo.Abp.Authorization.Permissions;
+using Volo.Abp.MultiTenancy;
+using Volo.Abp.SettingManagement;
+using Volo.Abp.Settings;
+
+namespace LINGYUN.Abp.WeChat.SettingManagement
+{
+ public class WeChatSettingAppService : ApplicationService, IWeChatSettingAppService
+ {
+ protected ISettingManager SettingManager { get; }
+ protected IPermissionChecker PermissionChecker { get; }
+ protected ISettingDefinitionManager SettingDefinitionManager { get; }
+
+ public WeChatSettingAppService(
+ ISettingManager settingManager,
+ IPermissionChecker permissionChecker,
+ ISettingDefinitionManager settingDefinitionManager)
+ {
+ SettingManager = settingManager;
+ PermissionChecker = permissionChecker;
+ SettingDefinitionManager = settingDefinitionManager;
+ LocalizationResource = typeof(WeChatResource);
+ }
+
+ public virtual async Task> GetAllForCurrentTenantAsync()
+ {
+ return await GetAllForProviderAsync(TenantSettingValueProvider.ProviderName, CurrentTenant.GetId().ToString());
+ }
+
+ public virtual async Task> GetAllForGlobalAsync()
+ {
+ return await GetAllForProviderAsync(GlobalSettingValueProvider.ProviderName, null);
+ }
+
+ protected virtual async Task> GetAllForProviderAsync(string providerName, string providerKey)
+ {
+ var settingGroups = new List();
+ var wechatSettingGroup = new SettingGroupDto(L["DisplayName:WeChat"], L["Description:WeChat"]);
+
+ // 无权限返回空结果,直接报错的话,网关聚合会抛出异常
+ if (await PermissionChecker.IsGrantedAsync(WeChatSettingPermissionNames.Official))
+ {
+ #region 公众号
+
+ var officialSetting = wechatSettingGroup.AddSetting(L["DisplayName:WeChat.Official"], L["Description:WeChat.Official"]);
+ officialSetting.AddDetail(
+ SettingDefinitionManager.Get(WeChatOfficialSettingNames.AppId),
+ StringLocalizerFactory,
+ await SettingManager.GetOrNullAsync(WeChatOfficialSettingNames.AppId, providerName, providerKey),
+ ValueType.String);
+ officialSetting.AddDetail(
+ SettingDefinitionManager.Get(WeChatOfficialSettingNames.AppSecret),
+ StringLocalizerFactory,
+ await SettingManager.GetOrNullAsync(WeChatOfficialSettingNames.AppSecret, providerName, providerKey),
+ ValueType.String);
+ officialSetting.AddDetail(
+ SettingDefinitionManager.Get(WeChatOfficialSettingNames.Url),
+ StringLocalizerFactory,
+ await SettingManager.GetOrNullAsync(WeChatOfficialSettingNames.Url, providerName, providerKey),
+ ValueType.String);
+ officialSetting.AddDetail(
+ SettingDefinitionManager.Get(WeChatOfficialSettingNames.Token),
+ StringLocalizerFactory,
+ await SettingManager.GetOrNullAsync(WeChatOfficialSettingNames.Token, providerName, providerKey),
+ ValueType.String);
+ officialSetting.AddDetail(
+ SettingDefinitionManager.Get(WeChatOfficialSettingNames.EncodingAESKey),
+ StringLocalizerFactory,
+ await SettingManager.GetOrNullAsync(WeChatOfficialSettingNames.EncodingAESKey, providerName, providerKey),
+ ValueType.String);
+
+ #endregion
+ }
+
+ if (await PermissionChecker.IsGrantedAsync(WeChatSettingPermissionNames.MiniProgram))
+ {
+ #region 小程序
+
+ var miniProgramSetting = wechatSettingGroup.AddSetting(L["DisplayName:WeChat.MiniProgram"], L["Description:WeChat.MiniProgram"]);
+ miniProgramSetting.AddDetail(
+ SettingDefinitionManager.Get(WeChatMiniProgramSettingNames.AppId),
+ StringLocalizerFactory,
+ await SettingManager.GetOrNullAsync(WeChatMiniProgramSettingNames.AppId, providerName, providerKey),
+ ValueType.String);
+ miniProgramSetting.AddDetail(
+ SettingDefinitionManager.Get(WeChatMiniProgramSettingNames.AppSecret),
+ StringLocalizerFactory,
+ await SettingManager.GetOrNullAsync(WeChatMiniProgramSettingNames.AppSecret, providerName, providerKey),
+ ValueType.String);
+ miniProgramSetting.AddDetail(
+ SettingDefinitionManager.Get(WeChatMiniProgramSettingNames.Token),
+ StringLocalizerFactory,
+ await SettingManager.GetOrNullAsync(WeChatMiniProgramSettingNames.Token, providerName, providerKey),
+ ValueType.String);
+ miniProgramSetting.AddDetail(
+ SettingDefinitionManager.Get(WeChatMiniProgramSettingNames.EncodingAESKey),
+ StringLocalizerFactory,
+ await SettingManager.GetOrNullAsync(WeChatMiniProgramSettingNames.EncodingAESKey, providerName, providerKey),
+ ValueType.String);
+
+ #endregion
+ }
+
+ settingGroups.Add(wechatSettingGroup);
+ return new ListResultDto(settingGroups);
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingController.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingController.cs
new file mode 100644
index 000000000..2fe1983aa
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingController.cs
@@ -0,0 +1,37 @@
+using LINGYUN.Abp.SettingManagement;
+using Microsoft.AspNetCore.Mvc;
+using System.Threading.Tasks;
+using Volo.Abp;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.AspNetCore.Mvc;
+
+namespace LINGYUN.Abp.WeChat.SettingManagement
+{
+ [RemoteService(Name = AbpSettingManagementRemoteServiceConsts.RemoteServiceName)]
+ [Area("settingManagement")]
+ [Route("api/setting-management/wechat")]
+ public class WeChatSettingController : AbpController, IWeChatSettingAppService
+ {
+ protected IWeChatSettingAppService WeChatSettingAppService { get; }
+
+ public WeChatSettingController(
+ IWeChatSettingAppService weChatSettingAppService)
+ {
+ WeChatSettingAppService = weChatSettingAppService;
+ }
+
+ [HttpGet]
+ [Route("by-current-tenant")]
+ public virtual async Task> GetAllForCurrentTenantAsync()
+ {
+ return await WeChatSettingAppService.GetAllForCurrentTenantAsync();
+ }
+
+ [HttpGet]
+ [Route("by-global")]
+ public virtual async Task> GetAllForGlobalAsync()
+ {
+ return await WeChatSettingAppService.GetAllForGlobalAsync();
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingPermissionDefinitionProvider.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingPermissionDefinitionProvider.cs
new file mode 100644
index 000000000..420c05660
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingPermissionDefinitionProvider.cs
@@ -0,0 +1,27 @@
+using LINGYUN.Abp.WeChat.Localization;
+using Volo.Abp.Authorization.Permissions;
+using Volo.Abp.Localization;
+
+namespace LINGYUN.Abp.WeChat.SettingManagement
+{
+ public class WeChatSettingPermissionDefinitionProvider : PermissionDefinitionProvider
+ {
+ public override void Define(IPermissionDefinitionContext context)
+ {
+ var wechatGroup = context.AddGroup(
+ WeChatSettingPermissionNames.GroupName,
+ L("Permission:WeChat"));
+
+ wechatGroup.AddPermission(
+ WeChatSettingPermissionNames.Official, L("Permission:WeChat.Official"));
+
+ wechatGroup.AddPermission(
+ WeChatSettingPermissionNames.MiniProgram, L("Permission:WeChat.MiniProgram"));
+ }
+
+ protected LocalizableString L(string name)
+ {
+ return LocalizableString.Create(name);
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingPermissionNames.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingPermissionNames.cs
new file mode 100644
index 000000000..074493bb8
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingPermissionNames.cs
@@ -0,0 +1,10 @@
+namespace LINGYUN.Abp.WeChat.SettingManagement
+{
+ public class WeChatSettingPermissionNames
+ {
+ public const string GroupName = "Abp.WeChat";
+
+ public const string Official = GroupName + ".Official";
+ public const string MiniProgram = GroupName + ".MiniProgram";
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN.Abp.WeChat.csproj b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN.Abp.WeChat.csproj
index 9466440f7..353a1ecb7 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN.Abp.WeChat.csproj
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN.Abp.WeChat.csproj
@@ -1,4 +1,4 @@
-
+
@@ -19,6 +19,9 @@
+
+
+
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/AbpWeChatGlobalConsts.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/AbpWeChatGlobalConsts.cs
new file mode 100644
index 000000000..3ba456eb3
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/AbpWeChatGlobalConsts.cs
@@ -0,0 +1,18 @@
+namespace LINGYUN.Abp.WeChat
+{
+ public class AbpWeChatGlobalConsts
+ {
+ ///
+ /// 微信授权名称
+ ///
+ public static string AuthenticationScheme { get; set; }= "WeChat";
+ ///
+ /// 微信授权Token参数名称
+ ///
+ public static string TokenName { get; set; }= "code";
+ ///
+ /// 微信授权显示名称
+ ///
+ public static string DisplayName { get; set; } = "WeChat";
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/AbpWeChatModule.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/AbpWeChatModule.cs
index 74bb1c0f0..bdcc28207 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/AbpWeChatModule.cs
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/AbpWeChatModule.cs
@@ -1,12 +1,20 @@
using LINGYUN.Abp.WeChat.Localization;
+using Microsoft.Extensions.DependencyInjection;
+using Polly;
+using System;
+using Volo.Abp.Caching;
using Volo.Abp.Features;
+using Volo.Abp.Json;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
namespace LINGYUN.Abp.WeChat
{
- [DependsOn(typeof(AbpFeaturesModule))]
+ [DependsOn(
+ typeof(AbpCachingModule),
+ typeof(AbpFeaturesModule),
+ typeof(AbpJsonModule))]
public class AbpWeChatModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
@@ -22,6 +30,12 @@ namespace LINGYUN.Abp.WeChat
.Add("zh-Hans")
.AddVirtualJson("/LINGYUN/Abp/WeChat/Localization/Resources");
});
+
+ context.Services.AddHttpClient("WeChatRequestClient", options =>
+ {
+ options.BaseAddress = new Uri("https://api.weixin.qq.com");
+ }).AddTransientHttpErrorPolicy(builder =>
+ builder.WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(Math.Pow(2, i))));
}
}
}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Localization/Resources/en.json b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Localization/Resources/en.json
index 1d424e365..cfdf39b93 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Localization/Resources/en.json
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Localization/Resources/en.json
@@ -1,6 +1,9 @@
{
"culture": "en",
"texts": {
- "Features:WeChat": "WeChat"
+ "Features:WeChat": "WeChat",
+ "Permission:WeChat": "WeChat",
+ "DisplayName:WeChat": "WeChat",
+ "Description:WeChat": "WeChat"
}
}
\ No newline at end of file
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Localization/Resources/zh-Hans.json b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Localization/Resources/zh-Hans.json
index c7811659b..f84b1ef39 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Localization/Resources/zh-Hans.json
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Localization/Resources/zh-Hans.json
@@ -1,6 +1,9 @@
{
"culture": "zh-Hans",
"texts": {
- "Features:WeChat": "微信开发"
+ "Features:WeChat": "微信开发",
+ "Permission:WeChat": "微信开发",
+ "DisplayName:WeChat": "微信开发平台",
+ "Description:WeChat": "微信开发平台"
}
}
\ No newline at end of file
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/IUserWeChatOpenIdFinder.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/IUserWeChatOpenIdFinder.cs
new file mode 100644
index 000000000..79f2c703f
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/IUserWeChatOpenIdFinder.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Threading.Tasks;
+
+namespace LINGYUN.Abp.WeChat.OpenId
+{
+ public interface IUserWeChatOpenIdFinder
+ {
+ Task FindByUserIdAsync(Guid userId, string provider);
+
+ Task FindByUserNameAsync(string userName, string provider);
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/IWeChatOpenIdFinder.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/IWeChatOpenIdFinder.cs
new file mode 100644
index 000000000..da2a0fc9c
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/IWeChatOpenIdFinder.cs
@@ -0,0 +1,9 @@
+using System.Threading.Tasks;
+
+namespace LINGYUN.Abp.WeChat.OpenId
+{
+ public interface IWeChatOpenIdFinder
+ {
+ Task FindAsync(string code, string appId, string appSecret);
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/NullUserWeChatOpenIdFinder.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/NullUserWeChatOpenIdFinder.cs
similarity index 61%
rename from aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/NullUserWeChatOpenIdFinder.cs
rename to aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/NullUserWeChatOpenIdFinder.cs
index d05fcfbc7..5eac9d338 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/NullUserWeChatOpenIdFinder.cs
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/NullUserWeChatOpenIdFinder.cs
@@ -2,16 +2,16 @@
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
-namespace LINGYUN.Abp.WeChat.Authorization
+namespace LINGYUN.Abp.WeChat.OpenId
{
public class NullUserWeChatOpenIdFinder : IUserWeChatOpenIdFinder, ISingletonDependency
{
- public Task FindByUserIdAsync(Guid userId)
+ public Task FindByUserIdAsync(Guid userId, string provider)
{
return Task.FromResult("");
}
- public Task FindByUserNameAsync(string userName)
+ public Task FindByUserNameAsync(string userName, string provider)
{
return Task.FromResult("");
}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenId.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenId.cs
similarity index 94%
rename from aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenId.cs
rename to aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenId.cs
index a1e4ae9a9..f7047cb6b 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenId.cs
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenId.cs
@@ -1,4 +1,4 @@
-namespace LINGYUN.Abp.WeChat.Authorization
+namespace LINGYUN.Abp.WeChat.OpenId
{
public class WeChatOpenId
{
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenIdCacheItem.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenIdCacheItem.cs
similarity index 70%
rename from aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenIdCacheItem.cs
rename to aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenIdCacheItem.cs
index 888f7dd5f..76ddc5492 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenIdCacheItem.cs
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenIdCacheItem.cs
@@ -1,6 +1,4 @@
-using System;
-
-namespace LINGYUN.Abp.WeChat.Authorization
+namespace LINGYUN.Abp.WeChat.OpenId
{
public class WeChatOpenIdCacheItem
{
@@ -18,9 +16,9 @@ namespace LINGYUN.Abp.WeChat.Authorization
WeChatOpenId = weChatOpenId;
}
- public static string CalculateCacheKey(string code)
+ public static string CalculateCacheKey(string appId, string code)
{
- return "c:" + code;
+ return "app:" + appId + ";code:" + code;
}
}
}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenIdFinder.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenIdFinder.cs
similarity index 88%
rename from aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenIdFinder.cs
rename to aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenIdFinder.cs
index a6e4b7dbc..634a030a3 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenIdFinder.cs
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenIdFinder.cs
@@ -2,7 +2,6 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
-using Microsoft.Extensions.Options;
using System;
using System.Net.Http;
using System.Threading.Tasks;
@@ -11,14 +10,13 @@ using Volo.Abp.DependencyInjection;
using Volo.Abp.Json;
using Volo.Abp.MultiTenancy;
-namespace LINGYUN.Abp.WeChat.Authorization
+namespace LINGYUN.Abp.WeChat.OpenId
{
[Dependency(ServiceLifetime.Singleton, ReplaceServices = true)]
[ExposeServices(typeof(IWeChatOpenIdFinder))]
public class WeChatOpenIdFinder : IWeChatOpenIdFinder
{
public ILogger Logger { get; set; }
- protected AbpWeChatAuthorizationOptions Options { get; }
protected ICurrentTenant CurrentTenant { get; }
protected IHttpClientFactory HttpClientFactory { get; }
protected IJsonSerializer JsonSerializer { get; }
@@ -27,7 +25,6 @@ namespace LINGYUN.Abp.WeChat.Authorization
ICurrentTenant currentTenant,
IJsonSerializer jsonSerializer,
IHttpClientFactory httpClientFactory,
- IOptions options,
IDistributedCache cache)
{
CurrentTenant = currentTenant;
@@ -35,20 +32,19 @@ namespace LINGYUN.Abp.WeChat.Authorization
HttpClientFactory = httpClientFactory;
Cache = cache;
- Options = options.Value;
Logger = NullLogger.Instance;
}
- public virtual async Task FindAsync(string code)
+ public virtual async Task FindAsync(string code, string appId, string appSecret)
{
// TODO: 如果需要获取SessionKey的话呢,需要再以openid作为标识来缓存一下吗
// 或者前端保存code,通过传递code来获取
- return (await GetCacheItemAsync(code)).WeChatOpenId;
+ return (await GetCacheItemAsync(code, appId, appSecret)).WeChatOpenId;
}
- protected virtual async Task GetCacheItemAsync(string code)
+ protected virtual async Task GetCacheItemAsync(string code, string appId, string appSecret)
{
- var cacheKey = WeChatOpenIdCacheItem.CalculateCacheKey(code);
+ var cacheKey = WeChatOpenIdCacheItem.CalculateCacheKey(appId, code);
Logger.LogDebug($"WeChatOpenIdFinder.GetCacheItemAsync: {cacheKey}");
@@ -67,8 +63,8 @@ namespace LINGYUN.Abp.WeChat.Authorization
var request = new WeChatOpenIdRequest
{
BaseUrl = client.BaseAddress.AbsoluteUri,
- AppId = Options.AppId,
- Secret = Options.AppSecret,
+ AppId = appId,
+ Secret = appSecret,
Code = code
};
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenIdRequest.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenIdRequest.cs
similarity index 82%
rename from aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenIdRequest.cs
rename to aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenIdRequest.cs
index 719d57089..5bd322665 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenIdRequest.cs
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenIdRequest.cs
@@ -1,4 +1,4 @@
-namespace LINGYUN.Abp.WeChat.Authorization
+namespace LINGYUN.Abp.WeChat.OpenId
{
public class WeChatOpenIdRequest
{
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenIdResponse.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenIdResponse.cs
similarity index 93%
rename from aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenIdResponse.cs
rename to aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenIdResponse.cs
index f85b48e42..d00bc54d9 100644
--- a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/WeChatOpenIdResponse.cs
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/OpenId/WeChatOpenIdResponse.cs
@@ -2,7 +2,7 @@
using System;
using Volo.Abp;
-namespace LINGYUN.Abp.WeChat.Authorization
+namespace LINGYUN.Abp.WeChat.OpenId
{
///
/// 微信OpenId返回对象
@@ -42,7 +42,7 @@ namespace LINGYUN.Abp.WeChat.Authorization
case "0": return string.Empty;
case "40029": return "code 无效";
case "45011": return "频率限制,每个用户每分钟100次";
- default: return "未知的异常,请重试";
+ default: return $"未定义的异常代码:{ErrorCode},请重试";
};
}
}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Security/Claims/AbpWeChatClaimTypes.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Security/Claims/AbpWeChatClaimTypes.cs
new file mode 100644
index 000000000..5f1181da3
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Security/Claims/AbpWeChatClaimTypes.cs
@@ -0,0 +1,48 @@
+namespace LINGYUN.Abp.WeChat.Security.Claims
+{
+ ///
+ /// 微信认证身份类型,可以像 自行配置
+ ///
+ /// See:
+ ///
+ public class AbpWeChatClaimTypes
+ {
+ ///
+ /// 用户的唯一标识
+ ///
+ public static string OpenId { get; set; } = "wx-openid"; // 可变更
+ ///
+ /// 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
+ ///
+ public static string UnionId { get; set; } = "wx-unionid"; //可变更
+ ///
+ /// 用户昵称
+ ///
+ public static string NickName { get; set; } = "nickname";
+ ///
+ /// 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
+ ///
+ public static string Sex { get; set; } = "sex";
+ ///
+ /// 国家,如中国为CN
+ ///
+ public static string Country { get; set; } = "country";
+ ///
+ /// 用户个人资料填写的省份
+ ///
+ public static string Province { get; set; } = "province";
+ ///
+ /// 普通用户个人资料填写的城市
+ ///
+ public static string City { get; set; } = "city";
+ ///
+ /// 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。
+ /// 若用户更换头像,原有头像URL将失效。
+ ///
+ public static string AvatarUrl { get; set; } = "avatar";
+ ///
+ /// 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)
+ ///
+ public static string Privilege { get; set; } = "privilege";
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Settings/WeChatSettingNames.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Settings/WeChatSettingNames.cs
new file mode 100644
index 000000000..416eb4854
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Settings/WeChatSettingNames.cs
@@ -0,0 +1,7 @@
+namespace LINGYUN.Abp.WeChat.Settings
+{
+ public static class WeChatSettingNames
+ {
+ public const string Prefix = "Abp.WeChat";
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/IWeChatTokenProvider.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/IWeChatTokenProvider.cs
new file mode 100644
index 000000000..e9c5e845b
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/IWeChatTokenProvider.cs
@@ -0,0 +1,10 @@
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace LINGYUN.Abp.WeChat.Token
+{
+ public interface IWeChatTokenProvider
+ {
+ Task GetTokenAsync(string appId, string appSecret, CancellationToken cancellationToken = default);
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatToken.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatToken.cs
new file mode 100644
index 000000000..590ede7fb
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatToken.cs
@@ -0,0 +1,26 @@
+namespace LINGYUN.Abp.WeChat.Token
+{
+ ///
+ /// 微信令牌
+ ///
+ public class WeChatToken
+ {
+ ///
+ /// 访问令牌
+ ///
+ public string AccessToken { get; set; }
+ ///
+ /// 过期时间,单位(s)
+ ///
+ public int ExpiresIn { get; set; }
+ public WeChatToken()
+ {
+
+ }
+ public WeChatToken(string token, int expiresIn)
+ {
+ AccessToken = token;
+ ExpiresIn = expiresIn;
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatTokenCacheItem.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatTokenCacheItem.cs
new file mode 100644
index 000000000..c61502111
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatTokenCacheItem.cs
@@ -0,0 +1,24 @@
+namespace LINGYUN.Abp.WeChat.Token
+{
+ public class WeChatTokenCacheItem
+ {
+ public string AppId { get; set; }
+
+ public WeChatToken WeChatToken { get; set; }
+ public WeChatTokenCacheItem()
+ {
+
+ }
+
+ public WeChatTokenCacheItem(string appId, WeChatToken weChatToken)
+ {
+ AppId = appId;
+ WeChatToken = weChatToken;
+ }
+
+ public static string CalculateCacheKey(string provider, string appId)
+ {
+ return "p:" + provider + ",o:" + appId;
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatTokenProvider.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatTokenProvider.cs
new file mode 100644
index 000000000..066b96159
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatTokenProvider.cs
@@ -0,0 +1,92 @@
+using Microsoft.Extensions.Caching.Distributed;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Abstractions;
+using System;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+using Volo.Abp.Caching;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Json;
+
+namespace LINGYUN.Abp.WeChat.Token
+{
+ public class WeChatTokenProvider : IWeChatTokenProvider, ISingletonDependency
+ {
+ public ILogger Logger { get; set; }
+ protected IHttpClientFactory HttpClientFactory { get; }
+ protected IJsonSerializer JsonSerializer { get; }
+ protected IDistributedCache Cache { get; }
+ public WeChatTokenProvider(
+ IJsonSerializer jsonSerializer,
+ IHttpClientFactory httpClientFactory,
+ IDistributedCache cache)
+ {
+ JsonSerializer = jsonSerializer;
+ HttpClientFactory = httpClientFactory;
+
+ Cache = cache;
+
+ Logger = NullLogger.Instance;
+ }
+
+ public virtual async Task GetTokenAsync(
+ string appId,
+ string appSecret,
+ CancellationToken cancellationToken = default)
+ {
+ return (await GetCacheItemAsync("WeChatToken", appId, appSecret, cancellationToken)).WeChatToken;
+ }
+
+ protected virtual async Task GetCacheItemAsync(
+ string provider,
+ string appId,
+ string appSecret,
+ CancellationToken cancellationToken = default)
+ {
+ var cacheKey = WeChatTokenCacheItem.CalculateCacheKey(provider, appId);
+
+ Logger.LogDebug($"WeChatTokenProvider.GetCacheItemAsync: {cacheKey}");
+
+ var cacheItem = await Cache.GetAsync(cacheKey, token: cancellationToken);
+
+ if (cacheItem != null)
+ {
+ Logger.LogDebug($"Found in the cache: {cacheKey}");
+ return cacheItem;
+ }
+
+ Logger.LogDebug($"Not found in the cache, getting from the httpClient: {cacheKey}");
+
+ var client = HttpClientFactory.CreateClient("WeChatRequestClient");
+
+ var request = new WeChatTokenRequest
+ {
+ BaseUrl = client.BaseAddress.AbsoluteUri,
+ AppSecret = appSecret,
+ AppId = appId,
+ GrantType = "client_credential"
+ };
+
+ var response = await client.RequestWeChatCodeTokenAsync(request, cancellationToken);
+ var responseContent = await response.Content.ReadAsStringAsync();
+ var weChatTokenResponse = JsonSerializer.Deserialize(responseContent);
+ var weChatToken = weChatTokenResponse.ToWeChatToken();
+ cacheItem = new WeChatTokenCacheItem(appId, weChatToken);
+
+ Logger.LogDebug($"Setting the cache item: {cacheKey}");
+
+ var cacheOptions = new DistributedCacheEntryOptions
+ {
+ // 设置绝对过期时间为Token有效期剩余的二分钟
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(weChatToken.ExpiresIn - 120)
+ };
+
+ await Cache.SetAsync(cacheKey, cacheItem, cacheOptions, token: cancellationToken);
+
+ Logger.LogDebug($"Finished setting the cache item: {cacheKey}");
+
+ return cacheItem;
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatTokenRequest.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatTokenRequest.cs
new file mode 100644
index 000000000..c95b428b1
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatTokenRequest.cs
@@ -0,0 +1,10 @@
+namespace LINGYUN.Abp.WeChat.Token
+{
+ public class WeChatTokenRequest
+ {
+ public string BaseUrl { get; set; }
+ public string GrantType { get; set; }
+ public string AppId { get; set; }
+ public string AppSecret { get; set; }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatTokenResponse.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatTokenResponse.cs
new file mode 100644
index 000000000..79cdd4d02
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/LINGYUN/Abp/WeChat/Token/WeChatTokenResponse.cs
@@ -0,0 +1,41 @@
+using Newtonsoft.Json;
+using Volo.Abp;
+
+namespace LINGYUN.Abp.WeChat.Token
+{
+ ///
+ /// 微信访问令牌返回对象
+ ///
+ public class WeChatTokenResponse
+ {
+ ///
+ /// 错误码
+ ///
+ [JsonProperty("errcode")]
+ public int ErrorCode { get; set; }
+ ///
+ /// 错误消息
+ ///
+ [JsonProperty("errmsg")]
+ public string ErrorMessage { get; set; }
+ ///
+ /// 访问令牌
+ ///
+ [JsonProperty("access_token")]
+ public string AccessToken { get; set; }
+ ///
+ /// 过期时间,单位(s)
+ ///
+ [JsonProperty("expires_in")]
+ public int ExpiresIn { get; set; }
+
+ public WeChatToken ToWeChatToken()
+ {
+ if(ErrorCode != 0)
+ {
+ throw new AbpException(ErrorMessage);
+ }
+ return new WeChatToken(AccessToken, ExpiresIn);
+ }
+ }
+}
diff --git a/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/System/Net/Http/HttpClientWeChatTokenRequestExtensions.cs b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/System/Net/Http/HttpClientWeChatTokenRequestExtensions.cs
new file mode 100644
index 000000000..dc1883c6b
--- /dev/null
+++ b/aspnet-core/modules/wechat/LINGYUN.Abp.WeChat/System/Net/Http/HttpClientWeChatTokenRequestExtensions.cs
@@ -0,0 +1,46 @@
+using LINGYUN.Abp.WeChat.OpenId;
+using LINGYUN.Abp.WeChat.Token;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace System.Net.Http
+{
+ public static class HttpClientWeChatTokenRequestExtensions
+ {
+ public static async Task RequestWeChatCodeTokenAsync(this HttpMessageInvoker client, WeChatTokenRequest request, CancellationToken cancellationToken = default)
+ {
+ var getResuestUrlBuilder = new StringBuilder();
+ getResuestUrlBuilder.Append(request.BaseUrl);
+ getResuestUrlBuilder.Append("cgi-bin/token");
+ getResuestUrlBuilder.Append("?grant_type=client_credential");
+ getResuestUrlBuilder.AppendFormat("&appid={0}", request.AppId);
+ getResuestUrlBuilder.AppendFormat("&secret={0}", request.AppSecret);
+
+ var getRequest = new HttpRequestMessage(HttpMethod.Get, getResuestUrlBuilder.ToString());
+ HttpResponseMessage httpResponse;
+
+ httpResponse = await client.SendAsync(getRequest, cancellationToken).ConfigureAwait(false);
+
+ return httpResponse;
+ }
+
+ public static async Task RequestWeChatOpenIdAsync(this HttpMessageInvoker client, WeChatOpenIdRequest request, CancellationToken cancellationToken = default)
+ {
+ var getResuestUrlBuiilder = new StringBuilder();
+ getResuestUrlBuiilder.Append(request.BaseUrl);
+ getResuestUrlBuiilder.Append("sns/jscode2session");
+ getResuestUrlBuiilder.AppendFormat("?appid={0}", request.AppId);
+ getResuestUrlBuiilder.AppendFormat("&secret={0}", request.Secret);
+ getResuestUrlBuiilder.AppendFormat("&js_code={0}", request.Code);
+ getResuestUrlBuiilder.Append("&grant_type=authorization_code");
+
+ var getRequest = new HttpRequestMessage(HttpMethod.Get, getResuestUrlBuiilder.ToString());
+ HttpResponseMessage httpResponse;
+
+ httpResponse = await client.SendAsync(getRequest, cancellationToken).ConfigureAwait(false);
+
+ return httpResponse;
+ }
+ }
+}
diff --git a/aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.cs b/aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.cs
index 600439192..b5e06c379 100644
--- a/aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.cs
+++ b/aspnet-core/services/account/AuthServer.Host/AuthIdentityServerModule.cs
@@ -3,6 +3,7 @@ using LINGYUN.Abp.EventBus.CAP;
using LINGYUN.Abp.Identity.EntityFrameworkCore;
using LINGYUN.Abp.IdentityServer;
using LINGYUN.Abp.IdentityServer.EntityFrameworkCore;
+using LINGYUN.Abp.IdentityServer.WeChat;
using LINGYUN.Abp.MultiTenancy.DbFinder;
using LINGYUN.Abp.PermissionManagement.Identity;
using LINYUN.Abp.Sms.Aliyun;
@@ -64,7 +65,7 @@ namespace AuthServer.Host
typeof(AbpIdentityHttpApiModule),
typeof(AbpIdentityServerEntityFrameworkCoreModule),
typeof(AbpIdentityServerSmsValidatorModule),
- typeof(AbpIdentityServerWeChatValidatorModule),
+ typeof(AbpIdentityServerWeChatModule),
typeof(AbpPermissionManagementDomainIdentityModule),
typeof(AbpPermissionManagementEntityFrameworkCoreModule),
typeof(AbpSettingManagementEntityFrameworkCoreModule),
diff --git a/aspnet-core/services/account/AuthServer.Host/AuthServer.Host.csproj b/aspnet-core/services/account/AuthServer.Host/AuthServer.Host.csproj
index 28b9b9d45..6c7f286ae 100644
--- a/aspnet-core/services/account/AuthServer.Host/AuthServer.Host.csproj
+++ b/aspnet-core/services/account/AuthServer.Host/AuthServer.Host.csproj
@@ -55,8 +55,8 @@
-
+
diff --git a/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/BackendAdminHostModule.cs b/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/BackendAdminHostModule.cs
index 2f1bed9d9..ae90ae280 100644
--- a/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/BackendAdminHostModule.cs
+++ b/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/BackendAdminHostModule.cs
@@ -10,6 +10,7 @@ using LINGYUN.Abp.MultiTenancy.DbFinder;
using LINGYUN.Abp.PermissionManagement.Identity;
using LINGYUN.Abp.SettingManagement;
using LINGYUN.Abp.TenantManagement;
+using LINGYUN.Abp.WeChat.SettingManagement;
using LINGYUN.ApiGateway;
using LINGYUN.Platform;
using LINYUN.Abp.Sms.Aliyun;
@@ -79,6 +80,7 @@ namespace LINGYUN.Abp.BackendAdmin
typeof(AbpAuditingHttpApiModule),
typeof(AbpTenantManagementApplicationModule),
typeof(AbpTenantManagementHttpApiModule),
+ typeof(AbpWeChatSettingManagementModule),// 微信配置管理模块
typeof(AbpEntityFrameworkCoreMySQLModule),
typeof(AbpIdentityEntityFrameworkCoreModule),// 用户角色权限需要引用包
typeof(AbpIdentityServerEntityFrameworkCoreModule), // 客户端权限需要引用包
diff --git a/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/LINGYUN.Abp.BackendAdmin.HttpApi.Host.csproj b/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/LINGYUN.Abp.BackendAdmin.HttpApi.Host.csproj
index 0f58e3d0c..8717cd972 100644
--- a/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/LINGYUN.Abp.BackendAdmin.HttpApi.Host.csproj
+++ b/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/LINGYUN.Abp.BackendAdmin.HttpApi.Host.csproj
@@ -77,6 +77,7 @@
+
diff --git a/aspnet-core/services/apigateway/LINGYUN.ApiGateway.Host/event-bus-cap.db b/aspnet-core/services/apigateway/LINGYUN.ApiGateway.Host/event-bus-cap.db
index 3c399f006..acb7dba57 100644
Binary files a/aspnet-core/services/apigateway/LINGYUN.ApiGateway.Host/event-bus-cap.db and b/aspnet-core/services/apigateway/LINGYUN.ApiGateway.Host/event-bus-cap.db differ
diff --git a/vueJs/src/api/settings.ts b/vueJs/src/api/settings.ts
index 2a74cb49c..fc4917fab 100644
--- a/vueJs/src/api/settings.ts
+++ b/vueJs/src/api/settings.ts
@@ -16,7 +16,7 @@ export default class SettingApiService {
* 设置公共配置
*/
public static setGlobalSettings(payload: SettingsUpdate) {
- const _url = '/api/setting-management/settings/by-global'
+ const _url = '/api/setting-management/settings/change-global'
return ApiService.Put(_url, payload, IdentityService)
}
@@ -32,7 +32,7 @@ export default class SettingApiService {
* 设置当前租户配置
*/
public static setCurrentTenantSettings(payload: SettingsUpdate) {
- const _url = '/api/setting-management/settings/by-current-tenant'
+ const _url = '/api/setting-management/settings/change-current-tenant'
return ApiService.Put(_url, payload, IdentityService)
}
diff --git a/vueJs/src/views/admin/identityServer/client/components/ClientEditForm.vue b/vueJs/src/views/admin/identityServer/client/components/ClientEditForm.vue
index 6089711b2..55dfafeb2 100644
--- a/vueJs/src/views/admin/identityServer/client/components/ClientEditForm.vue
+++ b/vueJs/src/views/admin/identityServer/client/components/ClientEditForm.vue
@@ -817,6 +817,8 @@ export default class extends Vue {
ClientApiService.updateClient(this.clientId, updateClient)
.then(client => {
this.client = client
+ const successMessage = this.l('global.successful')
+ this.$message.success(successMessage)
})
}
})