169 changed files with 0 additions and 8763 deletions
@ -1,30 +0,0 @@ |
|||||
<Project Sdk="Microsoft.NET.Sdk"> |
|
||||
<PropertyGroup> |
|
||||
<TargetFramework>net8.0</TargetFramework> <!-- 或其他适合的框架 --> |
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild> |
|
||||
<PackageId>LINGYUN.Abp.MicroService.Templates</PackageId> |
|
||||
<Version>8.3.0</Version> |
|
||||
<Authors>colin.in@foxmail.com</Authors> |
|
||||
<Description>Abp framework micro-service template</Description> |
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression> |
|
||||
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance> |
|
||||
<PackageProjectUrl>https://github.com/colinin/abp-next-admin</PackageProjectUrl> |
|
||||
<PackageTags>micro webapi cloud</PackageTags> |
|
||||
<PackageType>Template</PackageType> |
|
||||
<RepositoryType>git</RepositoryType> |
|
||||
<RepositoryUrl>https://github.com/colinin/abp-next-admin</RepositoryUrl> |
|
||||
<DevelopmentDependency>true</DevelopmentDependency> |
|
||||
<IsPackable>true</IsPackable> |
|
||||
<IsShipping>true</IsShipping> |
|
||||
<IsShippingPackage>true</IsShippingPackage> |
|
||||
<IncludeBuildOutput>False</IncludeBuildOutput> |
|
||||
<IncludeSource>False</IncludeSource> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<Content Include="content\**" Exclude="**/bin/**;**/obj/**;**/LocalNuget/**;**/.vs/**;**/.vscode/**;"> |
|
||||
<Pack>true</Pack> |
|
||||
<PackagePath>content</PackagePath> |
|
||||
</Content> |
|
||||
</ItemGroup> |
|
||||
</Project> |
|
||||
@ -1,109 +0,0 @@ |
|||||
{ |
|
||||
"$schema": "http://json.schemastore.org/template", |
|
||||
"author": "colin.in@foxmail.com", |
|
||||
"classifications": ["micro", "webapi", "cloud"], |
|
||||
"name": "LINGYUN.Abp.MicroService", |
|
||||
"identity": "LINGYUN.Abp.MicroService", |
|
||||
"description": "Abp framework micro-service template", |
|
||||
"groupIdentity": "LINGYUN.Abp.Application", |
|
||||
"shortName": "lam", |
|
||||
"tags": { |
|
||||
"language": "C#", |
|
||||
"type": "project" |
|
||||
}, |
|
||||
"sources": [ |
|
||||
{ |
|
||||
"modifiers": [ |
|
||||
{ |
|
||||
"exclude": [ "**/[Bb]in/**", "**/[Oo]bj/**", "**/[Ll]ocalNuget/**" , ".template.config/**/*", ".vs/**/*"] |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
], |
|
||||
"sourceName": "ProjectName", |
|
||||
"preferNameDirectory": true, |
|
||||
"symbols": { |
|
||||
"AuthenticationScheme": { |
|
||||
"type": "parameter", |
|
||||
"description": "Authentication Scheme", |
|
||||
"datatype": "choice", |
|
||||
"defaultValue": "IdentityServer4", |
|
||||
"isRequired": false, |
|
||||
"choices": [ |
|
||||
{ |
|
||||
"choice": "IdentityServer4", |
|
||||
"description": "IdentityServer4" |
|
||||
}, |
|
||||
{ |
|
||||
"choice": "OpenIddict", |
|
||||
"description": "OpenIddict" |
|
||||
} |
|
||||
] |
|
||||
}, |
|
||||
"DatabaseManagement": { |
|
||||
"type": "parameter", |
|
||||
"description": "Database Management", |
|
||||
"dataType": "choice", |
|
||||
"defaultValue": "MySQL", |
|
||||
"isRequired": false, |
|
||||
"choices": [ |
|
||||
{ |
|
||||
"choice": "SqlServer", |
|
||||
"description": "Sql Server" |
|
||||
}, |
|
||||
{ |
|
||||
"choice": "MySQL", |
|
||||
"description": "My SQL" |
|
||||
}, |
|
||||
{ |
|
||||
"choice": "Sqlite", |
|
||||
"description": "Sqlite" |
|
||||
}, |
|
||||
{ |
|
||||
"choice": "Oracle", |
|
||||
"description": "Oracle" |
|
||||
}, |
|
||||
{ |
|
||||
"choice": "OracleDevart", |
|
||||
"description": "Oracle Devart Driver" |
|
||||
}, |
|
||||
{ |
|
||||
"choice": "PostgreSql", |
|
||||
"description": "Postgre Sql" |
|
||||
} |
|
||||
] |
|
||||
}, |
|
||||
"SqlServer": { |
|
||||
"type": "computed", |
|
||||
"value": "(DatabaseManagement == \"SqlServer\")" |
|
||||
}, |
|
||||
"MySQL": { |
|
||||
"type": "computed", |
|
||||
"value": "(DatabaseManagement == \"MySQL\")" |
|
||||
}, |
|
||||
"Sqlite": { |
|
||||
"type": "computed", |
|
||||
"value": "(DatabaseManagement == \"Sqlite\")" |
|
||||
}, |
|
||||
"Oracle": { |
|
||||
"type": "computed", |
|
||||
"value": "(DatabaseManagement == \"Oracle\")" |
|
||||
}, |
|
||||
"OracleDevart": { |
|
||||
"type": "computed", |
|
||||
"value": "(DatabaseManagement == \"Oracle.Devart\")" |
|
||||
}, |
|
||||
"PostgreSql": { |
|
||||
"type": "computed", |
|
||||
"value": "(DatabaseManagement == \"PostgreSql\")" |
|
||||
}, |
|
||||
"IdentityServer4": { |
|
||||
"type": "computed", |
|
||||
"value": "(AuthenticationScheme == \"IdentityServer4\")" |
|
||||
}, |
|
||||
"OpenIddict": { |
|
||||
"type": "computed", |
|
||||
"value": "(AuthenticationScheme == \"OpenIddict\")" |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,5 +0,0 @@ |
|||||
{ |
|
||||
"description": "适用于abp框架的微服务模板项目", |
|
||||
"symbols/AuthenticationScheme/description": "认证服务体系, 可选项为: IdentityServer4、OpenIddict, 默认使用IdentityServer4.", |
|
||||
"symbols/DatabaseManagement/description": "数据库管理提供者, 可选项为: SqlServer、MySQL、Sqlite、Oracle、OracleDevart、PostgreSql, 默认使用MySQL." |
|
||||
} |
|
||||
@ -1,13 +0,0 @@ |
|||||
<Project> |
|
||||
<PropertyGroup> |
|
||||
<IsTestProject Condition="$(MSBuildProjectFullPath.Contains('test')) and ($(MSBuildProjectName.EndsWith('.Tests')) or $(MSBuildProjectName.EndsWith('.TestBase')))">true</IsTestProject> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<PackageReference Condition="'$(IsTestProject)' == 'true'" Include="coverlet.collector"> |
|
||||
<PrivateAssets>all</PrivateAssets> |
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> |
|
||||
</PackageReference> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
</Project> |
|
||||
@ -1,490 +0,0 @@ |
|||||
<Project> |
|
||||
<PropertyGroup> |
|
||||
<DotNetCoreCAPPackageVersion>8.2.0</DotNetCoreCAPPackageVersion> |
|
||||
<ElsaPackageVersion>2.14.1</ElsaPackageVersion> |
|
||||
<VoloAbpPackageVersion>8.3.0</VoloAbpPackageVersion> |
|
||||
<LINGYUNAbpPackageVersion>8.3.0</LINGYUNAbpPackageVersion> |
|
||||
<MicrosoftExtensionsPackageVersion>8.0.0</MicrosoftExtensionsPackageVersion> |
|
||||
<MicrosoftAspNetCorePackageVersion>8.0.0</MicrosoftAspNetCorePackageVersion> |
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>8.0.0</MicrosoftEntityFrameworkCorePackageVersion> |
|
||||
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<!-- LINGYUN Abp Framework --> |
|
||||
<ItemGroup> |
|
||||
<PackageVersion Include="LINGYUN.Abp.AspNetCore.HttpOverrides" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.AspNetCore.Mvc.Localization" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.AspNetCore.Mvc.Wrapper" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.AuditLogging" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.AuditLogging.Elasticsearch" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Authorization.OrganizationUnits" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.BackgroundTasks.Abstractions" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.BackgroundTasks.Jobs" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Data.DbMigrator" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.DataProtection" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.DataProtection.Abstractions" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.DataProtection.EntityFrameworkCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.DataProtectionManagement.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.DataProtectionManagement.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.DataProtectionManagement.Domain" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.DataProtectionManagement.Domain.Shared" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.DataProtectionManagement.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Dapr.Client" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Dapr.Client.Wrapper" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Dynamic.Queryable.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Dynamic.Queryable.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Dynamic.Queryable.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Elasticsearch" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Elsa.Activities" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.EntityChange.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.EntityChange.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.EntityChange.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.EventBus.CAP" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.ExceptionHandling" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.ExceptionHandling.Emailing" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Http.Client.Wrapper" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.IdGenerator" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Identity.Session" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Identity.Session.AspNetCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Localization.CultureMap" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.MultiTenancy" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Notifications" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Notifications.Core" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Notifications.SignalR" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Notifications.WxPusher" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Rules" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Rules.RulesEngine" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Saas.EntityFrameworkCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.SettingManagement.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Serilog.Enrichers.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Serilog.Enrichers.UniqueId" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.TextTemplating.EntityFrameworkCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.UI.Navigation" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Webhooks" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Webhooks.Core" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Webhooks.EventBus" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Linq.Dynamic.Queryable" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<!-- Abp Framework --> |
|
||||
<ItemGroup> |
|
||||
<PackageVersion Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite" Version="3.2.0" /> |
|
||||
<PackageVersion Include="Volo.Abp.Core" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Account.Application" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Account.Application.Contracts" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Account.Domain" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Account.Domain.Shared" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Account.EntityFrameworkCore" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Account.HttpApi" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Account.Web.IdentityServer" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Account.Web.OpenIddict" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AspNetCore" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AspNetCore.MultiTenancy" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AspNetCore.Mvc" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AspNetCore.Mvc.Client.Common" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AspNetCore.Mvc.Contracts" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AspNetCore.Mvc.NewtonsoftJson" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AspNetCore.Serilog" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AspNetCore.SignalR" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AspNetCore.TestBase" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Auditing" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Auditing.Contracts" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AuditLogging.Domain.Shared" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Authorization" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Authorization.Abstractions" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Autofac" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.AutoMapper" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.BackgroundJobs" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.BackgroundJobs.Abstractions" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.BackgroundWorkers" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.BlobStoring" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.BlobStoring.FileSystem" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Caching" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Caching.StackExchangeRedis" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Cli.Core" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Data" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Ddd.Application" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Ddd.Application.Contracts" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Ddd.Domain" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Ddd.Domain.Shared" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.DistributedLocking.Abstractions" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.DistributedLocking" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.EntityFrameworkCore" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.EntityFrameworkCore.MySql" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Features" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.FeatureManagement.Application" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.FeatureManagement.Application.Contracts" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.FeatureManagement.Domain" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.FeatureManagement.Domain.Shared" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.FeatureManagement.EntityFrameworkCore" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.FeatureManagement.HttpApi" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Emailing" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.EventBus" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.EventBus.Abstractions" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.ExceptionHandling" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Guids" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.GlobalFeatures" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.HangFire" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Http.Client" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Http.Client.IdentityModel.Web" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Identity.AspNetCore" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Identity.Application" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Identity.Application.Contracts" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Identity.Domain" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Identity.Domain.Shared" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Identity.EntityFrameworkCore" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Identity.HttpApi" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.IdentityServer.Application" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.IdentityServer.Application.Contracts" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.IdentityServer.Domain" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.IdentityServer.Domain.Shared" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.IdentityServer.EntityFrameworkCore" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.IdentityServer.HttpApi" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Identity.HttpApi.Client" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Imaging.Abstractions" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Imaging.ImageSharp" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Json" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Json.Abstractions" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Localization" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.MemoryDb" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.MultiTenancy" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.MultiTenancy.Abstractions" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.ObjectExtending" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.OpenIddict.Application" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.OpenIddict.Application.Contracts" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.OpenIddict.AspNetCore" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.OpenIddict.Domain" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.OpenIddict.Domain.Shared" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.OpenIddict.EntityFrameworkCore" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.OpenIddict.HttpApi" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.PermissionManagement.Application" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.PermissionManagement.Application.Contracts" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.PermissionManagement.Domain" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.PermissionManagement.Domain.Identity" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.PermissionManagement.Domain.IdentityServer" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.PermissionManagement.Domain.Shared" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.PermissionManagement.HttpApi" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Quartz" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Security" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Settings" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.SettingManagement.Application" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.SettingManagement.Application.Contracts" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.SettingManagement.Domain" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.SettingManagement.Domain.Shared" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.SettingManagement.HttpApi" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Swashbuckle" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Sms" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.TestBase" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.TextTemplating.Core" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.TextTemplating.Scriban" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Timing" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Threading" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Users.Abstractions" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Users.Domain.Shared" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.Validation" Version="$(VoloAbpPackageVersion)" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<!-- .NET --> |
|
||||
<ItemGroup> |
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.4" /> |
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="$(MicrosoftAspNetCorePackageVersion)" /> |
|
||||
<PackageVersion Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="$(MicrosoftAspNetCorePackageVersion)" /> |
|
||||
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="$(MicrosoftAspNetCorePackageVersion)" /> |
|
||||
<PackageVersion Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="$(MicrosoftAspNetCorePackageVersion)" /> |
|
||||
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="8.0.0" /> |
|
||||
<PackageVersion Include="Microsoft.CSharp" Version="4.7.0" /> |
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="$(MicrosoftEntityFrameworkCorePackageVersion)" /> |
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="$(MicrosoftEntityFrameworkCorePackageVersion)" /> |
|
||||
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="$(MicrosoftExtensionsPackageVersion)" /> |
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.UserSecrets" Version="$(MicrosoftExtensionsPackageVersion)" /> |
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="$(MicrosoftExtensionsPackageVersion)" /> |
|
||||
<PackageVersion Include="Microsoft.Extensions.FileProviders.Physical" Version="$(MicrosoftExtensionsPackageVersion)" /> |
|
||||
<PackageVersion Include="Microsoft.Extensions.Http" Version="$(MicrosoftExtensionsPackageVersion)" /> |
|
||||
<PackageVersion Include="Microsoft.Extensions.Http.Polly" Version="$(MicrosoftExtensionsPackageVersion)" /> |
|
||||
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="$(MicrosoftExtensionsPackageVersion)" /> |
|
||||
<PackageVersion Include="Microsoft.Extensions.Options" Version="8.0.2" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<!-- Elsa --> |
|
||||
<ItemGroup> |
|
||||
<PackageVersion Include="Elsa" Version="$(ElsaPackageVersion)" /> |
|
||||
<PackageVersion Include="Elsa.Activities.Email" Version="$(ElsaPackageVersion)" /> |
|
||||
<PackageVersion Include="Elsa.Activities.Http" Version="$(ElsaPackageVersion)" /> |
|
||||
<PackageVersion Include="Elsa.Activities.UserTask" Version="$(ElsaPackageVersion)" /> |
|
||||
<PackageVersion Include="Elsa.Activities.Temporal.Quartz" Version="$(ElsaPackageVersion)" /> |
|
||||
<PackageVersion Include="Elsa.Core" Version="$(ElsaPackageVersion)" /> |
|
||||
<PackageVersion Include="Elsa.Designer.Components.Web" Version="$(ElsaPackageVersion)" /> |
|
||||
<PackageVersion Include="Elsa.Rebus.RabbitMq" Version="$(ElsaPackageVersion)" /> |
|
||||
<PackageVersion Include="Elsa.Server.Api" Version="$(ElsaPackageVersion)" /> |
|
||||
<PackageVersion Include="Elsa.Webhooks.Api" Version="$(ElsaPackageVersion)" /> |
|
||||
<PackageVersion Include="Elsa.Webhooks.Persistence.EntityFramework.Core" Version="$(ElsaPackageVersion)" /> |
|
||||
<PackageVersion Include="Elsa.WorkflowSettings.Persistence.EntityFramework.Core" Version="$(ElsaPackageVersion)" /> |
|
||||
<PackageVersion Include="Elsa.Webhooks.Persistence.EntityFramework.MySql" Version="$(ElsaPackageVersion)" /> |
|
||||
<PackageVersion Include="Elsa.WorkflowSettings.Persistence.EntityFramework.MySql" Version="$(ElsaPackageVersion)" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<!-- DotNetCore.CAP --> |
|
||||
<ItemGroup> |
|
||||
<PackageVersion Include="DotNetCore.CAP" Version="$(DotNetCoreCAPPackageVersion)" /> |
|
||||
<PackageVersion Include="DotNetCore.CAP.Dashboard" Version="$(DotNetCoreCAPPackageVersion)" /> |
|
||||
<PackageVersion Include="DotNetCore.CAP.MySql" Version="$(DotNetCoreCAPPackageVersion)" /> |
|
||||
<PackageVersion Include="DotNetCore.CAP.OpenTelemetry" Version="$(DotNetCoreCAPPackageVersion)" /> |
|
||||
<PackageVersion Include="DotNetCore.CAP.Oracle" Version="$(DotNetCoreCAPPackageVersion)" /> |
|
||||
<PackageVersion Include="DotNetCore.CAP.PostgreSql" Version="$(DotNetCoreCAPPackageVersion)" /> |
|
||||
<PackageVersion Include="DotNetCore.CAP.RabbitMQ" Version="$(DotNetCoreCAPPackageVersion)" /> |
|
||||
<PackageVersion Include="DotNetCore.CAP.SqlServer" Version="$(DotNetCoreCAPPackageVersion)" /> |
|
||||
<PackageVersion Include="DotNetCore.CAP.Sqlite" Version="$(DotNetCoreCAPPackageVersion)" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<!-- Serilog --> |
|
||||
<ItemGroup> |
|
||||
<PackageVersion Include="Serilog" Version="3.1.1" /> |
|
||||
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.0" /> |
|
||||
<PackageVersion Include="Serilog.Enrichers.Environment" Version="2.3.0" /> |
|
||||
<PackageVersion Include="Serilog.Enrichers.Assembly" Version="2.0.0" /> |
|
||||
<PackageVersion Include="Serilog.Enrichers.Process" Version="2.0.2" /> |
|
||||
<PackageVersion Include="Serilog.Enrichers.Thread" Version="3.1.0" /> |
|
||||
<PackageVersion Include="Serilog.Extensions.Hosting" Version="8.0.0" /> |
|
||||
<PackageVersion Include="Serilog.Extensions.Logging" Version="8.0.0" /> |
|
||||
<PackageVersion Include="Serilog.Settings.Configuration" Version="8.0.0" /> |
|
||||
<PackageVersion Include="Serilog.Sinks.Async" Version="1.5.0" /> |
|
||||
<PackageVersion Include="Serilog.Sinks.Console" Version="5.0.0" /> |
|
||||
<PackageVersion Include="Serilog.Sinks.Elasticsearch" Version="9.0.3" /> |
|
||||
<PackageVersion Include="Serilog.Sinks.File" Version="5.0.0" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<!-- Test --> |
|
||||
<ItemGroup> |
|
||||
<PackageVersion Include="coverlet.collector" Version="6.0.0" /> |
|
||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.8.0" /> |
|
||||
<PackageVersion Include="Moq.AutoMock" Version="3.0.0" /> |
|
||||
<PackageVersion Include="NSubstitute" Version="5.1.0" /> |
|
||||
<PackageVersion Include="Shouldly" Version="4.2.1" /> |
|
||||
<PackageVersion Include="xunit" Version="2.6.1" /> |
|
||||
<PackageVersion Include="xunit.extensibility.execution" Version="2.6.1" /> |
|
||||
<PackageVersion Include="xunit.runner.visualstudio" Version="2.5.3" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<!-- Fody --> |
|
||||
<ItemGroup> |
|
||||
<PackageVersion Include="ConfigureAwait.Fody" Version="3.3.2" /> |
|
||||
<PackageVersion Include="Fody" Version="6.8.0" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<!-- Other --> |
|
||||
<ItemGroup> |
|
||||
<PackageVersion Include="aliyun-net-sdk-core" Version="1.5.10" /> |
|
||||
<PackageVersion Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" /> |
|
||||
<PackageVersion Include="AgileConfig.Client" Version="1.6.9" /> |
|
||||
<PackageVersion Include="Dapr.Client" Version="1.12.0" /> |
|
||||
<PackageVersion Include="Dapr.Actors" Version="1.12.0" /> |
|
||||
<PackageVersion Include="Dapr.Actors.AspNetCore" Version="1.12.0" /> |
|
||||
<PackageVersion Include="DistributedLock.Core" Version="1.0.5" /> |
|
||||
<PackageVersion Include="DistributedLock.Redis" Version="1.0.2" /> |
|
||||
<PackageVersion Include="Hangfire.MySqlStorage" Version="2.0.3" /> |
|
||||
<PackageVersion Include="HangFire.SqlServer" Version="1.8.6" /> |
|
||||
<PackageVersion Include="IdentityModel" Version="6.2.0" /> |
|
||||
<PackageVersion Include="JetBrains.Annotations" Version="2023.3.0" /> |
|
||||
<PackageVersion Include="Markdig" Version="0.34.0" /> |
|
||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" /> |
|
||||
<PackageVersion Include="NEST" Version="7.15.1" /> |
|
||||
<PackageVersion Include="NRules" Version="0.9.2" /> |
|
||||
<PackageVersion Include="Ocelot.Provider.Polly" Version="20.0.0" /> |
|
||||
<PackageVersion Include="Volo.Abp.EntityFrameworkCore.PostgreSql" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="Volo.Abp.PermissionManagement.Domain.OpenIddict" Version="$(VoloAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.AuditLogging.EntityFrameworkCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Authentication.QQ" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Authentication.WeChat" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Aliyun.SettingManagement" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Aliyun" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Tencent.QQ" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Tencent.SettingManagement" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Tencent" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Features.LimitValidation.Redis.Client" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Features.LimitValidation.Redis" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Features.LimitValidation" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.RealTime" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Wrapper" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Exporter.MiniExcel" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.FeatureManagement.Client" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Localization.Persistence" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Logging.Serilog.Elasticsearch" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Logging" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Sms.Aliyun" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.AspNetCore.Mvc.Idempotent.Wrapper" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OpenApi.Authorization" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OpenApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.MultiTenancy.Editions" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Identity.WeChat" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WeChat.MiniProgram" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WeChat.Official.Handlers" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WeChat.Official" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WeChat.Official.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WeChat.Official.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WeChat.SettingManagement" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WeChat.Work.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WeChat.Work.Handlers" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WeChat.Work.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WeChat.Work" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WeChat" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Account.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Account.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Account.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Account.Templates" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Auditing.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Auditing.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Auditing.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.CachingManagement.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.CachingManagement.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.CachingManagement.Domain" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.CachingManagement.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.CachingManagement.StackExchangeRedis" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Elsa.Activities.BlobStoring" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Elsa.Activities.Emailing" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Elsa.Activities.IM" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Elsa.Activities.Notifications" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Elsa.Activities.Sms" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Elsa.Activities.Webhooks" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Elsa.EntityFrameworkCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Elsa.Server" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Elsa" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.FeatureManagement.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.FeatureManagement.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.IdentityServer.Session" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Identity.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Identity.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Identity.AspNetCore.Session" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Identity.Domain.Shared" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Identity.Domain" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Identity.EntityFrameworkCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Identity.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Identity.Notifications" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Identity.OrganizaztionUnits" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.IdentityServer.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.IdentityServer.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.IdentityServer.Domain" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.IdentityServer.EntityFrameworkCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.IdentityServer.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.IdentityServer.LinkUser" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.IdentityServer.Portal" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.IdentityServer.SmsValidator" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.IdentityServer.WeChat.Work" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.LocalizationManagement.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.LocalizationManagement.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.LocalizationManagement.Domain.Shared" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.LocalizationManagement.Domain" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.LocalizationManagement.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OpenIddict.AspNetCore.Session" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OpenIddict.AspNetCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.IM.SignalR" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.IM" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.MessageService.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.MessageService.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.MessageService.Domain.Shared" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.MessageService.Domain" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.MessageService.EntityFrameworkCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.MessageService.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.ExceptionHandling.Notifications" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Notifications.Common" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Notifications.Emailing" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Notifications.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Notifications.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Notifications.Domain.Shared" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Notifications.Domain" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Notifications.EntityFrameworkCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Notifications.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Notifications.WeChat.MiniProgram" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Notifications.WeChat.Work" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OpenIddict.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OpenIddict.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OpenIddict.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OpenIddict.LinkUser" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OpenIddict.Sms" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OpenIddict.Portal" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OpenIddict.WeChat" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OpenIddict.WeChat.Work" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OssManagement.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OssManagement.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OssManagement.Domain.Shared" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OssManagement.Domain" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OssManagement.FileSystem" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OssManagement.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.OssManagement.SettingManagement" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.PermissionManagement.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.PermissionManagement.Domain.OrganizationUnits" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.PermissionManagement.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.UI.Navigation.VueVbenAdmin" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Platform.Domain.Shared" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Platform.Domain" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Platform.EntityFrameworkCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Platform.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Platform.Settings.VueVbenAdmin" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Platform.Theme.VueVbenAdmin" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Saas.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Saas.Domain.Shared" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Saas.Domain" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Saas.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Saas.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.SettingManagement.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.SettingManagement.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.BackgroundTasks.Activities" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.BackgroundTasks.DistributedLocking" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.BackgroundTasks.EventBus" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.BackgroundTasks.ExceptionHandling" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.BackgroundTasks.Notifications" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.BackgroundTasks.Quartz" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.BackgroundTasks" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.TaskManagement.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.TaskManagement.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.TaskManagement.Domain.Shared" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.TaskManagement.Domain" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.TaskManagement.EntityFrameworkCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.TaskManagement.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.TextTemplating.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.TextTemplating.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.TextTemplating.Domain.Shared" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.TextTemplating.Domain" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.TextTemplating.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Webhooks.Identity" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.Webhooks.Saas" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WebhooksManagement.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WebhooksManagement.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WebhooksManagement.Domain.Shared" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WebhooksManagement.Domain" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Abp.WebhooksManagement.HttpApi" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Platform.Application.Contracts" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="LINGYUN.Platform.Application" Version="$(LINGYUNAbpPackageVersion)" /> |
|
||||
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.8.1" /> |
|
||||
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.8.1" /> |
|
||||
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.8.1" /> |
|
||||
<PackageVersion Include="OpenTelemetry.Exporter.Zipkin" Version="1.8.1" /> |
|
||||
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.8.1" /> |
|
||||
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.8.1" /> |
|
||||
<PackageVersion Include="OpenTelemetry.Instrumentation.EntityFrameworkCore" Version="1.0.0-beta.11" /> |
|
||||
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.8.1" /> |
|
||||
<PackageVersion Include="Polly" Version="8.2.0" /> |
|
||||
<PackageVersion Include="Quartz.Serialization.Json" Version="3.7.0" /> |
|
||||
<PackageVersion Include="RulesEngine" Version="4.0.0" /> |
|
||||
<PackageVersion Include="Senparc.Weixin.MP" Version="16.18.9" /> |
|
||||
<PackageVersion Include="SixLabors.ImageSharp" Version="3.0.2" /> |
|
||||
<PackageVersion Include="SixLabors.ImageSharp.Drawing" Version="2.0.1" /> |
|
||||
<PackageVersion Include="StackExchange.Redis" Version="2.7.4" /> |
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.5.0" /> |
|
||||
<PackageVersion Include="System.ComponentModel.Annotations" Version="5.0.0" /> |
|
||||
<PackageVersion Include="Tencent.QCloud.Cos.Sdk" Version="5.4.37" /> |
|
||||
<PackageVersion Include="TencentCloudSDK" Version="3.0.712" /> |
|
||||
<PackageVersion Include="Yarp.ReverseProxy" Version="2.1.0" /> |
|
||||
<PackageVersion Include="OpenIddict.Server.DataProtection" Version="5.5.0" /> |
|
||||
<PackageVersion Include="OpenIddict.Validation.DataProtection" Version="5.5.0" /> |
|
||||
</ItemGroup> |
|
||||
</Project> |
|
||||
@ -1,12 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<configuration> |
|
||||
<packageSources> |
|
||||
<clear /> |
|
||||
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> |
|
||||
</packageSources> |
|
||||
<packageSourceMapping> |
|
||||
<packageSource key="nuget.org"> |
|
||||
<package pattern="*" /> |
|
||||
</packageSource> |
|
||||
</packageSourceMapping> |
|
||||
</configuration> |
|
||||
@ -1,150 +0,0 @@ |
|||||
|
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00 |
|
||||
# Visual Studio Version 17 |
|
||||
VisualStudioVersion = 17.0.31903.59 |
|
||||
MinimumVisualStudioVersion = 10.0.40219.1 |
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{4B0AD527-99B3-49A9-8A45-FD8671F8BE4D}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.HttpApi.Host", "host\PackageName.CompanyName.ProjectName.HttpApi.Host\PackageName.CompanyName.ProjectName.HttpApi.Host.csproj", "{31E33CE2-71D3-43FF-9A30-2DCC82C607AE}" |
|
||||
EndProject |
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Solution Items", ".Solution Items", "{C9675742-7986-4BC1-9781-FD1C3C5B6287}" |
|
||||
ProjectSection(SolutionItems) = preProject |
|
||||
common.props = common.props |
|
||||
configureawait.props = configureawait.props |
|
||||
Directory.Build.props = Directory.Build.props |
|
||||
Directory.Packages.props = Directory.Packages.props |
|
||||
NuGet.Config = NuGet.Config |
|
||||
EndProjectSection |
|
||||
EndProject |
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{4786387C-C1C5-46F8-806F-EBC54DB0A4FA}" |
|
||||
EndProject |
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{A9CB1547-1C2C-4A23-82EC-C834C1626E0A}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.Application.Tests", "tests\PackageName.CompanyName.ProjectName.Application.Tests\PackageName.CompanyName.ProjectName.Application.Tests.csproj", "{9262FE7A-76B2-424F-8C34-AFA1D95D7E5A}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.Domain.Tests", "tests\PackageName.CompanyName.ProjectName.Domain.Tests\PackageName.CompanyName.ProjectName.Domain.Tests.csproj", "{A0D1F8A4-3494-4E26-9E2D-DB874B93DBCE}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.EntityFrameworkCore.Tests", "tests\PackageName.CompanyName.ProjectName.EntityFrameworkCore.Tests\PackageName.CompanyName.ProjectName.EntityFrameworkCore.Tests.csproj", "{0B2E1C9E-092D-4E5F-BE9F-5506E689FC85}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.TestBase", "tests\PackageName.CompanyName.ProjectName.TestBase\PackageName.CompanyName.ProjectName.TestBase.csproj", "{4A9D43A2-D08B-40E8-9C74-F2B95BF81AED}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.DbMigrator", "host\PackageName.CompanyName.ProjectName.DbMigrator\PackageName.CompanyName.ProjectName.DbMigrator.csproj", "{F6EE5BCD-69C7-4C8A-8B45-251AFE2BB01E}" |
|
||||
EndProject |
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "migrations", "migrations", "{2BF87FAA-69E7-486E-9123-1F407A2BB633}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.Domain.Shared", "src\PackageName.CompanyName.ProjectName.Domain.Shared\PackageName.CompanyName.ProjectName.Domain.Shared.csproj", "{77090F97-BD80-4469-842F-F5769CF849E9}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.Domain", "src\PackageName.CompanyName.ProjectName.Domain\PackageName.CompanyName.ProjectName.Domain.csproj", "{DF2CCF03-95D5-4BE4-8B32-742818C56F15}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.Application.Contracts", "src\PackageName.CompanyName.ProjectName.Application.Contracts\PackageName.CompanyName.ProjectName.Application.Contracts.csproj", "{54FB9929-7D9C-40FC-A0D0-94ACBA37D20E}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.Application", "src\PackageName.CompanyName.ProjectName.Application\PackageName.CompanyName.ProjectName.Application.csproj", "{F2A6182F-BCB9-4C80-947C-0A2ED1B6BFDB}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.Dapr.Client", "src\PackageName.CompanyName.ProjectName.Dapr.Client\PackageName.CompanyName.ProjectName.Dapr.Client.csproj", "{B69F04FF-8505-49F6-9B60-BB800846C87C}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.EntityFrameworkCore", "src\PackageName.CompanyName.ProjectName.EntityFrameworkCore\PackageName.CompanyName.ProjectName.EntityFrameworkCore.csproj", "{09CA7186-DBA7-4428-A1ED-31292AC02050}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.HttpApi", "src\PackageName.CompanyName.ProjectName.HttpApi\PackageName.CompanyName.ProjectName.HttpApi.csproj", "{FDB3A3E9-C072-438D-8B8D-2AA957C1167F}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.HttpApi.Client", "src\PackageName.CompanyName.ProjectName.HttpApi.Client\PackageName.CompanyName.ProjectName.HttpApi.Client.csproj", "{8CE7C515-CD78-42D4-A9D7-39D217A3D046}" |
|
||||
EndProject |
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PackageName.CompanyName.ProjectName.SettingManagement", "src\PackageName.CompanyName.ProjectName.SettingManagement\PackageName.CompanyName.ProjectName.SettingManagement.csproj", "{CAEB3435-A332-4FFA-BE5F-4E386FA8B19B}" |
|
||||
EndProject |
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageName.CompanyName.ProjectName.AIO.Host", "host\PackageName.CompanyName.ProjectName.AIO.Host\PackageName.CompanyName.ProjectName.AIO.Host.csproj", "{26F1E2F7-3B0E-4333-9E66-EFE0D113386B}" |
|
||||
EndProject |
|
||||
Global |
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
|
||||
Debug|Any CPU = Debug|Any CPU |
|
||||
Release|Any CPU = Release|Any CPU |
|
||||
EndGlobalSection |
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
|
||||
{31E33CE2-71D3-43FF-9A30-2DCC82C607AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{31E33CE2-71D3-43FF-9A30-2DCC82C607AE}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{31E33CE2-71D3-43FF-9A30-2DCC82C607AE}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{31E33CE2-71D3-43FF-9A30-2DCC82C607AE}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{9262FE7A-76B2-424F-8C34-AFA1D95D7E5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{9262FE7A-76B2-424F-8C34-AFA1D95D7E5A}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{9262FE7A-76B2-424F-8C34-AFA1D95D7E5A}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{9262FE7A-76B2-424F-8C34-AFA1D95D7E5A}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{A0D1F8A4-3494-4E26-9E2D-DB874B93DBCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{A0D1F8A4-3494-4E26-9E2D-DB874B93DBCE}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{A0D1F8A4-3494-4E26-9E2D-DB874B93DBCE}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{A0D1F8A4-3494-4E26-9E2D-DB874B93DBCE}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{0B2E1C9E-092D-4E5F-BE9F-5506E689FC85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{0B2E1C9E-092D-4E5F-BE9F-5506E689FC85}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{0B2E1C9E-092D-4E5F-BE9F-5506E689FC85}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{0B2E1C9E-092D-4E5F-BE9F-5506E689FC85}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{4A9D43A2-D08B-40E8-9C74-F2B95BF81AED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{4A9D43A2-D08B-40E8-9C74-F2B95BF81AED}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{4A9D43A2-D08B-40E8-9C74-F2B95BF81AED}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{4A9D43A2-D08B-40E8-9C74-F2B95BF81AED}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{F6EE5BCD-69C7-4C8A-8B45-251AFE2BB01E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{F6EE5BCD-69C7-4C8A-8B45-251AFE2BB01E}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{F6EE5BCD-69C7-4C8A-8B45-251AFE2BB01E}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{F6EE5BCD-69C7-4C8A-8B45-251AFE2BB01E}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{77090F97-BD80-4469-842F-F5769CF849E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{77090F97-BD80-4469-842F-F5769CF849E9}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{77090F97-BD80-4469-842F-F5769CF849E9}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{77090F97-BD80-4469-842F-F5769CF849E9}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{DF2CCF03-95D5-4BE4-8B32-742818C56F15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{DF2CCF03-95D5-4BE4-8B32-742818C56F15}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{DF2CCF03-95D5-4BE4-8B32-742818C56F15}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{DF2CCF03-95D5-4BE4-8B32-742818C56F15}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{54FB9929-7D9C-40FC-A0D0-94ACBA37D20E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{54FB9929-7D9C-40FC-A0D0-94ACBA37D20E}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{54FB9929-7D9C-40FC-A0D0-94ACBA37D20E}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{54FB9929-7D9C-40FC-A0D0-94ACBA37D20E}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{F2A6182F-BCB9-4C80-947C-0A2ED1B6BFDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{F2A6182F-BCB9-4C80-947C-0A2ED1B6BFDB}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{F2A6182F-BCB9-4C80-947C-0A2ED1B6BFDB}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{F2A6182F-BCB9-4C80-947C-0A2ED1B6BFDB}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{B69F04FF-8505-49F6-9B60-BB800846C87C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{B69F04FF-8505-49F6-9B60-BB800846C87C}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{B69F04FF-8505-49F6-9B60-BB800846C87C}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{B69F04FF-8505-49F6-9B60-BB800846C87C}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{09CA7186-DBA7-4428-A1ED-31292AC02050}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{09CA7186-DBA7-4428-A1ED-31292AC02050}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{09CA7186-DBA7-4428-A1ED-31292AC02050}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{09CA7186-DBA7-4428-A1ED-31292AC02050}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{FDB3A3E9-C072-438D-8B8D-2AA957C1167F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{FDB3A3E9-C072-438D-8B8D-2AA957C1167F}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{FDB3A3E9-C072-438D-8B8D-2AA957C1167F}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{FDB3A3E9-C072-438D-8B8D-2AA957C1167F}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{8CE7C515-CD78-42D4-A9D7-39D217A3D046}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{8CE7C515-CD78-42D4-A9D7-39D217A3D046}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{8CE7C515-CD78-42D4-A9D7-39D217A3D046}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{8CE7C515-CD78-42D4-A9D7-39D217A3D046}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{CAEB3435-A332-4FFA-BE5F-4E386FA8B19B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{CAEB3435-A332-4FFA-BE5F-4E386FA8B19B}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{CAEB3435-A332-4FFA-BE5F-4E386FA8B19B}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{CAEB3435-A332-4FFA-BE5F-4E386FA8B19B}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
{26F1E2F7-3B0E-4333-9E66-EFE0D113386B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
||||
{26F1E2F7-3B0E-4333-9E66-EFE0D113386B}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
||||
{26F1E2F7-3B0E-4333-9E66-EFE0D113386B}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
||||
{26F1E2F7-3B0E-4333-9E66-EFE0D113386B}.Release|Any CPU.Build.0 = Release|Any CPU |
|
||||
EndGlobalSection |
|
||||
GlobalSection(SolutionProperties) = preSolution |
|
||||
HideSolutionNode = FALSE |
|
||||
EndGlobalSection |
|
||||
GlobalSection(NestedProjects) = preSolution |
|
||||
{31E33CE2-71D3-43FF-9A30-2DCC82C607AE} = {4786387C-C1C5-46F8-806F-EBC54DB0A4FA} |
|
||||
{9262FE7A-76B2-424F-8C34-AFA1D95D7E5A} = {A9CB1547-1C2C-4A23-82EC-C834C1626E0A} |
|
||||
{A0D1F8A4-3494-4E26-9E2D-DB874B93DBCE} = {A9CB1547-1C2C-4A23-82EC-C834C1626E0A} |
|
||||
{0B2E1C9E-092D-4E5F-BE9F-5506E689FC85} = {A9CB1547-1C2C-4A23-82EC-C834C1626E0A} |
|
||||
{4A9D43A2-D08B-40E8-9C74-F2B95BF81AED} = {A9CB1547-1C2C-4A23-82EC-C834C1626E0A} |
|
||||
{F6EE5BCD-69C7-4C8A-8B45-251AFE2BB01E} = {2BF87FAA-69E7-486E-9123-1F407A2BB633} |
|
||||
{77090F97-BD80-4469-842F-F5769CF849E9} = {4B0AD527-99B3-49A9-8A45-FD8671F8BE4D} |
|
||||
{DF2CCF03-95D5-4BE4-8B32-742818C56F15} = {4B0AD527-99B3-49A9-8A45-FD8671F8BE4D} |
|
||||
{54FB9929-7D9C-40FC-A0D0-94ACBA37D20E} = {4B0AD527-99B3-49A9-8A45-FD8671F8BE4D} |
|
||||
{F2A6182F-BCB9-4C80-947C-0A2ED1B6BFDB} = {4B0AD527-99B3-49A9-8A45-FD8671F8BE4D} |
|
||||
{B69F04FF-8505-49F6-9B60-BB800846C87C} = {4B0AD527-99B3-49A9-8A45-FD8671F8BE4D} |
|
||||
{09CA7186-DBA7-4428-A1ED-31292AC02050} = {4B0AD527-99B3-49A9-8A45-FD8671F8BE4D} |
|
||||
{FDB3A3E9-C072-438D-8B8D-2AA957C1167F} = {4B0AD527-99B3-49A9-8A45-FD8671F8BE4D} |
|
||||
{8CE7C515-CD78-42D4-A9D7-39D217A3D046} = {4B0AD527-99B3-49A9-8A45-FD8671F8BE4D} |
|
||||
{CAEB3435-A332-4FFA-BE5F-4E386FA8B19B} = {4B0AD527-99B3-49A9-8A45-FD8671F8BE4D} |
|
||||
{26F1E2F7-3B0E-4333-9E66-EFE0D113386B} = {4786387C-C1C5-46F8-806F-EBC54DB0A4FA} |
|
||||
EndGlobalSection |
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution |
|
||||
SolutionGuid = {62C0F185-E2C2-46A2-B4B2-5E703E25849E} |
|
||||
EndGlobalSection |
|
||||
EndGlobal |
|
||||
@ -1,83 +0,0 @@ |
|||||
# LINGYUN.Abp.MicroService.Template |
|
||||
|
|
||||
[English](README.md) | [中文](README.zh-CN.md) |
|
||||
|
|
||||
## Introduction |
|
||||
|
|
||||
LINGYUN.Abp.MicroService.Template is a microservice project template based on ABP Framework. This template provides a complete microservice architecture foundation, including necessary project structure and configurations. |
|
||||
|
|
||||
## Features |
|
||||
|
|
||||
- Complete microservice project structure |
|
||||
- Integrated authentication |
|
||||
- Database integration (multiple databases supported) |
|
||||
- Unified configuration management |
|
||||
- Distributed event bus support |
|
||||
- Background job processing |
|
||||
|
|
||||
## How to Use |
|
||||
|
|
||||
### Install Template |
|
||||
|
|
||||
```bash |
|
||||
dotnet new install LINGYUN.Abp.MicroService.Template |
|
||||
``` |
|
||||
|
|
||||
### Create New Project |
|
||||
|
|
||||
```bash |
|
||||
labp create YourCompanyName.YourProjectName -pk YourPackageName -o /path/to/output --dbms MySql --cs "Server=127.0.0.1;Database=YourDatabase;User Id=your_user;Password=your_password;SslMode=None" --no-random-port |
|
||||
``` |
|
||||
|
|
||||
## How to Run |
|
||||
|
|
||||
After creating your project, you can run it using the following command: |
|
||||
|
|
||||
```bash |
|
||||
dotnet run --launch-profile "YourPackageName.YourCompanyName.YourProjectName.Development" |
|
||||
``` |
|
||||
|
|
||||
For example: |
|
||||
```bash |
|
||||
dotnet run --launch-profile "LY.MicroService.Applications.Single.Development" |
|
||||
``` |
|
||||
|
|
||||
## How to Package and Publish |
|
||||
|
|
||||
1. Clone the Project |
|
||||
|
|
||||
```bash |
|
||||
git clone <repository-url> |
|
||||
cd <repository-path>/aspnet-core/templates/content |
|
||||
``` |
|
||||
|
|
||||
2. Modify Version |
|
||||
Edit `../PackageName.CompanyName.ProjectName.csproj` file, update PackageVersion: |
|
||||
|
|
||||
```xml |
|
||||
<PackageVersion>8.3.0</PackageVersion> |
|
||||
``` |
|
||||
|
|
||||
3. Execute Packaging Script |
|
||||
|
|
||||
```powershell |
|
||||
# Windows PowerShell |
|
||||
.\pack.ps1 |
|
||||
|
|
||||
# PowerShell Core (Windows/Linux/macOS) |
|
||||
pwsh pack.ps1 |
|
||||
``` |
|
||||
|
|
||||
## Supported Databases |
|
||||
|
|
||||
- SqlServer |
|
||||
- MySQL |
|
||||
- PostgreSQL |
|
||||
- Oracle |
|
||||
- SQLite |
|
||||
|
|
||||
## Notes |
|
||||
|
|
||||
- Ensure .NET SDK 8.0 or higher is installed |
|
||||
- Pay attention to NuGet publish address and key when packaging |
|
||||
- Complete testing is recommended before publishing |
|
||||
@ -1,83 +0,0 @@ |
|||||
# LINGYUN.Abp.MicroService.Template |
|
||||
|
|
||||
[English](README.md) | [中文](README.zh-CN.md) |
|
||||
|
|
||||
## 简介 |
|
||||
|
|
||||
LINGYUN.Abp.MicroService.Template 是一个基于 ABP Framework 的微服务项目模板。此模板提供了一个完整的微服务架构基础,包括必要的项目结构和配置。 |
|
||||
|
|
||||
## 功能特点 |
|
||||
|
|
||||
- 完整的微服务项目结构 |
|
||||
- 集成身份认证 |
|
||||
- 数据库集成(支持多种数据库) |
|
||||
- 统一的配置管理 |
|
||||
- 分布式事件总线支持 |
|
||||
- 后台任务处理 |
|
||||
|
|
||||
## 如何使用 |
|
||||
|
|
||||
### 安装模板 |
|
||||
|
|
||||
```bash |
|
||||
dotnet new install LINGYUN.Abp.MicroService.Template |
|
||||
``` |
|
||||
|
|
||||
### 创建新项目 |
|
||||
|
|
||||
```bash |
|
||||
labp create YourCompanyName.YourProjectName -pk YourPackageName -o /path/to/output --dbms MySql --cs "Server=127.0.0.1;Database=YourDatabase;User Id=your_user;Password=your_password;SslMode=None" --no-random-port |
|
||||
``` |
|
||||
|
|
||||
## 如何运行 |
|
||||
|
|
||||
创建项目后,您可以使用以下命令运行项目: |
|
||||
|
|
||||
```bash |
|
||||
dotnet run --launch-profile "YourPackageName.YourCompanyName.YourProjectName.Development" |
|
||||
``` |
|
||||
|
|
||||
示例: |
|
||||
```bash |
|
||||
dotnet run --launch-profile "LY.MicroService.Applications.Single.Development" |
|
||||
``` |
|
||||
|
|
||||
## 如何打包发布 |
|
||||
|
|
||||
1. 克隆项目 |
|
||||
|
|
||||
```bash |
|
||||
git clone <repository-url> |
|
||||
cd <repository-path>/aspnet-core/templates/content |
|
||||
``` |
|
||||
|
|
||||
2. 修改版本号 |
|
||||
编辑 `../PackageName.CompanyName.ProjectName.csproj` 文件,更新 PackageVersion: |
|
||||
|
|
||||
```xml |
|
||||
<PackageVersion>8.3.0</PackageVersion> |
|
||||
``` |
|
||||
|
|
||||
3. 执行打包脚本 |
|
||||
|
|
||||
```powershell |
|
||||
# Windows PowerShell |
|
||||
.\pack.ps1 |
|
||||
|
|
||||
# PowerShell Core (Windows/Linux/macOS) |
|
||||
pwsh pack.ps1 |
|
||||
``` |
|
||||
|
|
||||
## 支持的数据库 |
|
||||
|
|
||||
- SqlServer |
|
||||
- MySQL |
|
||||
- PostgreSQL |
|
||||
- Oracle |
|
||||
- SQLite |
|
||||
|
|
||||
## 注意事项 |
|
||||
|
|
||||
- 确保已安装 .NET SDK 8.0 或更高版本 |
|
||||
- 打包时注意修改 NuGet 发布地址和密钥 |
|
||||
- 建议在发布前进行完整的测试 |
|
||||
@ -1,38 +0,0 @@ |
|||||
<Project> |
|
||||
<PropertyGroup> |
|
||||
<LangVersion>latest</LangVersion> |
|
||||
<Version>8.2.1</Version> |
|
||||
<Authors>colin</Authors> |
|
||||
<NoWarn>$(NoWarn);CS1591;CS0436;CS8618;NU1803</NoWarn> |
|
||||
<PackageProjectUrl>https://github.com/colinin/abp-next-admin</PackageProjectUrl> |
|
||||
<PackageOutputPath>$(SolutionDir)LocalNuget</PackageOutputPath> |
|
||||
<PackageVersion>8.2.1</PackageVersion> |
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression> |
|
||||
<RepositoryType>git</RepositoryType> |
|
||||
<RepositoryUrl>https://github.com/colinin/abp-next-admin</RepositoryUrl> |
|
||||
<GeneratePackageOnBuild Condition="$(AssemblyName.StartsWith('LINGYUN'))">true</GeneratePackageOnBuild> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<Compile Remove="LocalNuget\**" /> |
|
||||
<EmbeddedResource Remove="LocalNuget\**" /> |
|
||||
<None Remove="LocalNuget\**" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<Compile Remove="Logs\**" /> |
|
||||
<EmbeddedResource Remove="Logs\**" /> |
|
||||
<None Remove="Logs\**" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<Compile Remove="Modules\**" /> |
|
||||
<EmbeddedResource Remove="Modules\**" /> |
|
||||
<None Remove="Modules\**" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> |
|
||||
<OutputPath>$(SolutionDir)LocalNuget</OutputPath> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
</Project> |
|
||||
@ -1,9 +0,0 @@ |
|||||
<Project> |
|
||||
<ItemGroup> |
|
||||
<PackageReference Include="ConfigureAwait.Fody" PrivateAssets="All" /> |
|
||||
<PackageReference Include="Fody"> |
|
||||
<PrivateAssets>All</PrivateAssets> |
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> |
|
||||
</PackageReference> |
|
||||
</ItemGroup> |
|
||||
</Project> |
|
||||
@ -1,12 +0,0 @@ |
|||||
{ |
|
||||
"version": 1, |
|
||||
"isRoot": true, |
|
||||
"tools": { |
|
||||
"dotnet-ef": { |
|
||||
"version": "7.0.3", |
|
||||
"commands": [ |
|
||||
"dotnet-ef" |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,2 +0,0 @@ |
|||||
wwwroot |
|
||||
package*.json |
|
||||
@ -1,89 +0,0 @@ |
|||||
using Microsoft.AspNetCore.Authentication; |
|
||||
using Microsoft.AspNetCore.Authentication.Cookies; |
|
||||
using Microsoft.Extensions.Options; |
|
||||
using System.Text.Encodings.Web; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.Authentication; |
|
||||
|
|
||||
public class AbpCookieAuthenticationHandler : CookieAuthenticationHandler |
|
||||
{ |
|
||||
public AbpCookieAuthenticationHandler( |
|
||||
IOptionsMonitor<CookieAuthenticationOptions> options, |
|
||||
ILoggerFactory logger, |
|
||||
UrlEncoder encoder) : base(options, logger, encoder) |
|
||||
{ |
|
||||
} |
|
||||
|
|
||||
public AbpCookieAuthenticationHandler( |
|
||||
IOptionsMonitor<CookieAuthenticationOptions> options, |
|
||||
ILoggerFactory logger, |
|
||||
UrlEncoder encoder, |
|
||||
ISystemClock clock) : base(options, logger, encoder, clock) |
|
||||
{ |
|
||||
} |
|
||||
|
|
||||
protected const string XRequestFromHeader = "X-Request-From"; |
|
||||
protected const string DontRedirectRequestFromHeader = "vben"; |
|
||||
protected override Task InitializeEventsAsync() |
|
||||
{ |
|
||||
var events = new CookieAuthenticationEvents |
|
||||
{ |
|
||||
OnRedirectToLogin = ctx => |
|
||||
{ |
|
||||
if (string.Equals(ctx.Request.Headers[XRequestFromHeader], DontRedirectRequestFromHeader, StringComparison.Ordinal)) |
|
||||
{ |
|
||||
// ctx.Response.Headers.Location = ctx.RedirectUri;
|
|
||||
ctx.Response.StatusCode = 401; |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
ctx.Response.Redirect(ctx.RedirectUri); |
|
||||
} |
|
||||
return Task.CompletedTask; |
|
||||
}, |
|
||||
OnRedirectToAccessDenied = ctx => |
|
||||
{ |
|
||||
if (string.Equals(ctx.Request.Headers[XRequestFromHeader], DontRedirectRequestFromHeader, StringComparison.Ordinal)) |
|
||||
{ |
|
||||
// ctx.Response.Headers.Location = ctx.RedirectUri;
|
|
||||
ctx.Response.StatusCode = 401; |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
ctx.Response.Redirect(ctx.RedirectUri); |
|
||||
} |
|
||||
return Task.CompletedTask; |
|
||||
}, |
|
||||
OnRedirectToLogout = ctx => |
|
||||
{ |
|
||||
if (string.Equals(ctx.Request.Headers[XRequestFromHeader], DontRedirectRequestFromHeader, StringComparison.Ordinal)) |
|
||||
{ |
|
||||
// ctx.Response.Headers.Location = ctx.RedirectUri;
|
|
||||
ctx.Response.StatusCode = 401; |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
ctx.Response.Redirect(ctx.RedirectUri); |
|
||||
} |
|
||||
return Task.CompletedTask; |
|
||||
}, |
|
||||
OnRedirectToReturnUrl = ctx => |
|
||||
{ |
|
||||
if (string.Equals(ctx.Request.Headers[XRequestFromHeader], DontRedirectRequestFromHeader, StringComparison.Ordinal)) |
|
||||
{ |
|
||||
// ctx.Response.Headers.Location = ctx.RedirectUri;
|
|
||||
ctx.Response.StatusCode = 401; |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
ctx.Response.Redirect(ctx.RedirectUri); |
|
||||
} |
|
||||
return Task.CompletedTask; |
|
||||
} |
|
||||
}; |
|
||||
|
|
||||
Events = events; |
|
||||
|
|
||||
return Task.CompletedTask; |
|
||||
} |
|
||||
} |
|
||||
@ -1,38 +0,0 @@ |
|||||
using LINGYUN.Abp.Notifications; |
|
||||
using Microsoft.Extensions.Options; |
|
||||
using Volo.Abp.BackgroundJobs; |
|
||||
using Volo.Abp.DependencyInjection; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.BackgroundJobs; |
|
||||
|
|
||||
public class NotificationPublishJob : AsyncBackgroundJob<NotificationPublishJobArgs>, ITransientDependency |
|
||||
{ |
|
||||
protected AbpNotificationsPublishOptions Options { get; } |
|
||||
protected IServiceScopeFactory ServiceScopeFactory { get; } |
|
||||
protected INotificationDataSerializer NotificationDataSerializer { get; } |
|
||||
public NotificationPublishJob( |
|
||||
IOptions<AbpNotificationsPublishOptions> options, |
|
||||
IServiceScopeFactory serviceScopeFactory, |
|
||||
INotificationDataSerializer notificationDataSerializer) |
|
||||
{ |
|
||||
Options = options.Value; |
|
||||
ServiceScopeFactory = serviceScopeFactory; |
|
||||
NotificationDataSerializer = notificationDataSerializer; |
|
||||
} |
|
||||
|
|
||||
public override async Task ExecuteAsync(NotificationPublishJobArgs args) |
|
||||
{ |
|
||||
var providerType = Type.GetType(args.ProviderType); |
|
||||
using (var scope = ServiceScopeFactory.CreateScope()) |
|
||||
{ |
|
||||
if (scope.ServiceProvider.GetRequiredService(providerType) is INotificationPublishProvider publishProvider) |
|
||||
{ |
|
||||
var store = scope.ServiceProvider.GetRequiredService<INotificationStore>(); |
|
||||
var notification = await store.GetNotificationOrNullAsync(args.TenantId, args.NotificationId); |
|
||||
notification.Data = NotificationDataSerializer.Serialize(notification.Data); |
|
||||
|
|
||||
await publishProvider.PublishAsync(notification, args.UserIdentifiers); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,22 +0,0 @@ |
|||||
using LINGYUN.Abp.Notifications; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.BackgroundJobs; |
|
||||
|
|
||||
public class NotificationPublishJobArgs |
|
||||
{ |
|
||||
public Guid? TenantId { get; set; } |
|
||||
public long NotificationId { get; set; } |
|
||||
public string ProviderType { get; set; } |
|
||||
public List<UserIdentifier> UserIdentifiers { get; set; } |
|
||||
public NotificationPublishJobArgs() |
|
||||
{ |
|
||||
UserIdentifiers = new List<UserIdentifier>(); |
|
||||
} |
|
||||
public NotificationPublishJobArgs(long id, string providerType, List<UserIdentifier> userIdentifiers, Guid? tenantId = null) |
|
||||
{ |
|
||||
NotificationId = id; |
|
||||
ProviderType = providerType; |
|
||||
UserIdentifiers = userIdentifiers; |
|
||||
TenantId = tenantId; |
|
||||
} |
|
||||
} |
|
||||
@ -1,11 +0,0 @@ |
|||||
using Microsoft.AspNetCore.Mvc; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.Controllers; |
|
||||
|
|
||||
public class HomeController : Controller |
|
||||
{ |
|
||||
public IActionResult Index() |
|
||||
{ |
|
||||
return Redirect("/swagger"); |
|
||||
} |
|
||||
} |
|
||||
@ -1,70 +0,0 @@ |
|||||
using LINGYUN.Abp.SettingManagement; |
|
||||
using Microsoft.AspNetCore.Mvc; |
|
||||
using Microsoft.Extensions.Options; |
|
||||
using Volo.Abp.DependencyInjection; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.Controllers; |
|
||||
|
|
||||
[ExposeServices( |
|
||||
typeof(SettingController), |
|
||||
typeof(SettingMergeController))] |
|
||||
public class SettingMergeController : SettingController |
|
||||
{ |
|
||||
private readonly SettingManagementMergeOptions _mergeOptions; |
|
||||
public SettingMergeController( |
|
||||
ISettingAppService settingAppService, |
|
||||
ISettingTestAppService settingTestAppService, |
|
||||
IOptions<SettingManagementMergeOptions> mergeOptions) |
|
||||
: base(settingAppService, settingTestAppService) |
|
||||
{ |
|
||||
_mergeOptions = mergeOptions.Value; |
|
||||
} |
|
||||
|
|
||||
[HttpGet] |
|
||||
[Route("by-current-tenant")] |
|
||||
public async override Task<SettingGroupResult> GetAllForCurrentTenantAsync() |
|
||||
{ |
|
||||
var result = new SettingGroupResult(); |
|
||||
var markTypeMap = new List<Type> |
|
||||
{ |
|
||||
typeof(SettingMergeController), |
|
||||
}; |
|
||||
foreach (var serviceType in _mergeOptions.GlobalSettingProviders |
|
||||
.Where(type => !markTypeMap.Any(markType => type.IsAssignableFrom(markType)))) |
|
||||
{ |
|
||||
var settingService = LazyServiceProvider.LazyGetRequiredService(serviceType).As<IReadonlySettingAppService>(); |
|
||||
var currentResult = await settingService.GetAllForCurrentTenantAsync(); |
|
||||
foreach (var group in currentResult.Items) |
|
||||
{ |
|
||||
result.AddGroup(group); |
|
||||
} |
|
||||
markTypeMap.Add(serviceType); |
|
||||
} |
|
||||
|
|
||||
return result; |
|
||||
} |
|
||||
|
|
||||
[HttpGet] |
|
||||
[Route("by-global")] |
|
||||
public async override Task<SettingGroupResult> GetAllForGlobalAsync() |
|
||||
{ |
|
||||
var result = new SettingGroupResult(); |
|
||||
var markTypeMap = new List<Type> |
|
||||
{ |
|
||||
typeof(SettingMergeController), |
|
||||
}; |
|
||||
foreach (var serviceType in _mergeOptions.GlobalSettingProviders |
|
||||
.Where(type => !markTypeMap.Any(markType => type.IsAssignableFrom(markType)))) |
|
||||
{ |
|
||||
var settingService = LazyServiceProvider.LazyGetRequiredService(serviceType).As<IReadonlySettingAppService>(); |
|
||||
var currentResult = await settingService.GetAllForGlobalAsync(); |
|
||||
foreach (var group in currentResult.Items) |
|
||||
{ |
|
||||
result.AddGroup(group); |
|
||||
} |
|
||||
markTypeMap.Add(serviceType); |
|
||||
} |
|
||||
|
|
||||
return result; |
|
||||
} |
|
||||
} |
|
||||
@ -1,45 +0,0 @@ |
|||||
using LINGYUN.Abp.SettingManagement; |
|
||||
using Microsoft.AspNetCore.Mvc; |
|
||||
using Microsoft.Extensions.Options; |
|
||||
using Volo.Abp.DependencyInjection; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.Controllers; |
|
||||
|
|
||||
[ExposeServices( |
|
||||
typeof(UserSettingController), |
|
||||
typeof(UserSettingMergeController))] |
|
||||
public class UserSettingMergeController : UserSettingController |
|
||||
{ |
|
||||
private readonly SettingManagementMergeOptions _mergeOptions; |
|
||||
public UserSettingMergeController( |
|
||||
IUserSettingAppService service, |
|
||||
IOptions<SettingManagementMergeOptions> mergeOptions) |
|
||||
: base(service) |
|
||||
{ |
|
||||
_mergeOptions = mergeOptions.Value; |
|
||||
} |
|
||||
|
|
||||
[HttpGet] |
|
||||
[Route("by-current-user")] |
|
||||
public async override Task<SettingGroupResult> GetAllForCurrentUserAsync() |
|
||||
{ |
|
||||
var result = new SettingGroupResult(); |
|
||||
var markTypeMap = new List<Type> |
|
||||
{ |
|
||||
typeof(UserSettingMergeController), |
|
||||
}; |
|
||||
foreach (var serviceType in _mergeOptions.UserSettingProviders |
|
||||
.Where(type => !markTypeMap.Any(markType => type.IsAssignableFrom(markType)))) |
|
||||
{ |
|
||||
var settingService = LazyServiceProvider.LazyGetRequiredService(serviceType).As<IUserSettingAppService>(); |
|
||||
var currentResult = await settingService.GetAllForCurrentUserAsync(); |
|
||||
foreach (var group in currentResult.Items) |
|
||||
{ |
|
||||
result.AddGroup(group); |
|
||||
} |
|
||||
markTypeMap.Add(serviceType); |
|
||||
} |
|
||||
|
|
||||
return result; |
|
||||
} |
|
||||
} |
|
||||
@ -1,19 +0,0 @@ |
|||||
FROM mcr.microsoft.com/dotnet/aspnet:8.0 |
|
||||
LABEL maintainer="colin.in@foxmail.com" |
|
||||
WORKDIR /app |
|
||||
|
|
||||
COPY . /app |
|
||||
|
|
||||
#东8区 |
|
||||
ENV TZ=Asia/Shanghai |
|
||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone |
|
||||
|
|
||||
EXPOSE 80/tcp |
|
||||
VOLUME [ "./app/blobs" ] |
|
||||
VOLUME [ "./app/Logs" ] |
|
||||
VOLUME [ "./app/Modules" ] |
|
||||
|
|
||||
RUN apt update |
|
||||
RUN apt install wget -y |
|
||||
|
|
||||
ENTRYPOINT ["dotnet", "LY.MicroService.Applications.Single.dll"] |
|
||||
@ -1,59 +0,0 @@ |
|||||
using LINGYUN.Abp.IM; |
|
||||
using LINGYUN.Abp.IM.Messages; |
|
||||
using LINGYUN.Abp.RealTime; |
|
||||
using Microsoft.Extensions.Logging.Abstractions; |
|
||||
using Microsoft.Extensions.Options; |
|
||||
using Volo.Abp.DependencyInjection; |
|
||||
using Volo.Abp.EventBus.Distributed; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.EventBus.Distributed |
|
||||
{ |
|
||||
public class ChatMessageEventHandler : IDistributedEventHandler<RealTimeEto<ChatMessage>>, ITransientDependency |
|
||||
{ |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="ILogger<DefaultNotificationDispatcher>"/>.
|
|
||||
/// </summary>
|
|
||||
public ILogger<ChatMessageEventHandler> Logger { get; set; } |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="AbpIMOptions"/>.
|
|
||||
/// </summary>
|
|
||||
protected AbpIMOptions Options { get; } |
|
||||
|
|
||||
protected IMessageStore MessageStore { get; } |
|
||||
protected IMessageBlocker MessageBlocker { get; } |
|
||||
protected IMessageSenderProviderManager MessageSenderProviderManager { get; } |
|
||||
|
|
||||
public ChatMessageEventHandler( |
|
||||
IOptions<AbpIMOptions> options, |
|
||||
IMessageStore messageStore, |
|
||||
IMessageBlocker messageBlocker, |
|
||||
IMessageSenderProviderManager messageSenderProviderManager) |
|
||||
{ |
|
||||
Options = options.Value; |
|
||||
MessageStore = messageStore; |
|
||||
MessageBlocker = messageBlocker; |
|
||||
MessageSenderProviderManager = messageSenderProviderManager; |
|
||||
|
|
||||
Logger = NullLogger<ChatMessageEventHandler>.Instance; |
|
||||
} |
|
||||
|
|
||||
public async virtual Task HandleEventAsync(RealTimeEto<ChatMessage> eventData) |
|
||||
{ |
|
||||
Logger.LogDebug($"Persistent chat message."); |
|
||||
|
|
||||
var message = eventData.Data; |
|
||||
// 消息拦截
|
|
||||
// 扩展敏感词汇过滤
|
|
||||
await MessageBlocker.InterceptAsync(message); |
|
||||
|
|
||||
await MessageStore.StoreMessageAsync(message); |
|
||||
|
|
||||
// 发送消息
|
|
||||
foreach (var provider in MessageSenderProviderManager.Providers) |
|
||||
{ |
|
||||
Logger.LogDebug($"Sending message with provider {provider.Name}"); |
|
||||
await provider.SendMessageAsync(message); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,470 +0,0 @@ |
|||||
using LINGYUN.Abp.Notifications; |
|
||||
using Microsoft.Extensions.Localization; |
|
||||
using Microsoft.Extensions.Logging.Abstractions; |
|
||||
using Microsoft.Extensions.Options; |
|
||||
using PackageName.CompanyName.ProjectName.AIO.Host.BackgroundJobs; |
|
||||
using PackageName.CompanyName.ProjectName.AIO.Host.MultiTenancy; |
|
||||
using System.Globalization; |
|
||||
using Volo.Abp.BackgroundJobs; |
|
||||
using Volo.Abp.DependencyInjection; |
|
||||
using Volo.Abp.EventBus.Distributed; |
|
||||
using Volo.Abp.Json; |
|
||||
using Volo.Abp.Localization; |
|
||||
using Volo.Abp.MultiTenancy; |
|
||||
using Volo.Abp.TextTemplating; |
|
||||
using Volo.Abp.Uow; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.EventBus.Distributed |
|
||||
{ |
|
||||
/// <summary>
|
|
||||
/// 订阅通知发布事件,统一发布消息
|
|
||||
/// </summary>
|
|
||||
/// <remarks>
|
|
||||
/// 作用在于SignalR客户端只会与一台服务器建立连接,
|
|
||||
/// 只有启用了SignlR服务端的才能真正将消息发布到客户端
|
|
||||
/// </remarks>
|
|
||||
public class NotificationEventHandler : |
|
||||
IDistributedEventHandler<NotificationEto<NotificationData>>, |
|
||||
IDistributedEventHandler<NotificationEto<NotificationTemplate>>, |
|
||||
ITransientDependency |
|
||||
{ |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="ILogger<DefaultNotificationDispatcher>"/>.
|
|
||||
/// </summary>
|
|
||||
public ILogger<NotificationEventHandler> Logger { get; set; } |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="AbpNotificationsPublishOptions"/>.
|
|
||||
/// </summary>
|
|
||||
protected AbpNotificationsPublishOptions Options { get; } |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="ICurrentTenant"/>.
|
|
||||
/// </summary>
|
|
||||
protected ICurrentTenant CurrentTenant { get; } |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="ITenantConfigurationCache"/>.
|
|
||||
/// </summary>
|
|
||||
protected ITenantConfigurationCache TenantConfigurationCache { get; } |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="IJsonSerializer"/>.
|
|
||||
/// </summary>
|
|
||||
protected IJsonSerializer JsonSerializer { get; } |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="IBackgroundJobManager"/>.
|
|
||||
/// </summary>
|
|
||||
protected IBackgroundJobManager BackgroundJobManager { get; } |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="ITemplateRenderer"/>.
|
|
||||
/// </summary>
|
|
||||
protected ITemplateRenderer TemplateRenderer { get; } |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="INotificationStore"/>.
|
|
||||
/// </summary>
|
|
||||
protected INotificationStore NotificationStore { get; } |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="IStringLocalizerFactory"/>.
|
|
||||
/// </summary>
|
|
||||
protected IStringLocalizerFactory StringLocalizerFactory { get; } |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="INotificationDataSerializer"/>.
|
|
||||
/// </summary>
|
|
||||
protected INotificationDataSerializer NotificationDataSerializer { get; } |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="INotificationDefinitionManager"/>.
|
|
||||
/// </summary>
|
|
||||
protected INotificationDefinitionManager NotificationDefinitionManager { get; } |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="INotificationSubscriptionManager"/>.
|
|
||||
/// </summary>
|
|
||||
protected INotificationSubscriptionManager NotificationSubscriptionManager { get; } |
|
||||
/// <summary>
|
|
||||
/// Reference to <see cref="INotificationPublishProviderManager"/>.
|
|
||||
/// </summary>
|
|
||||
protected INotificationPublishProviderManager NotificationPublishProviderManager { get; } |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// Initializes a new instance of the <see cref="NotificationEventHandler"/> class.
|
|
||||
/// </summary>
|
|
||||
public NotificationEventHandler( |
|
||||
ICurrentTenant currentTenant, |
|
||||
ITenantConfigurationCache tenantConfigurationCache, |
|
||||
IJsonSerializer jsonSerializer, |
|
||||
ITemplateRenderer templateRenderer, |
|
||||
IBackgroundJobManager backgroundJobManager, |
|
||||
IStringLocalizerFactory stringLocalizerFactory, |
|
||||
IOptions<AbpNotificationsPublishOptions> options, |
|
||||
INotificationStore notificationStore, |
|
||||
INotificationDataSerializer notificationDataSerializer, |
|
||||
INotificationDefinitionManager notificationDefinitionManager, |
|
||||
INotificationSubscriptionManager notificationSubscriptionManager, |
|
||||
INotificationPublishProviderManager notificationPublishProviderManager) |
|
||||
{ |
|
||||
Options = options.Value; |
|
||||
TenantConfigurationCache = tenantConfigurationCache; |
|
||||
CurrentTenant = currentTenant; |
|
||||
JsonSerializer = jsonSerializer; |
|
||||
TemplateRenderer = templateRenderer; |
|
||||
BackgroundJobManager = backgroundJobManager; |
|
||||
StringLocalizerFactory = stringLocalizerFactory; |
|
||||
NotificationStore = notificationStore; |
|
||||
NotificationDataSerializer = notificationDataSerializer; |
|
||||
NotificationDefinitionManager = notificationDefinitionManager; |
|
||||
NotificationSubscriptionManager = notificationSubscriptionManager; |
|
||||
NotificationPublishProviderManager = notificationPublishProviderManager; |
|
||||
|
|
||||
Logger = NullLogger<NotificationEventHandler>.Instance; |
|
||||
} |
|
||||
|
|
||||
[UnitOfWork] |
|
||||
public async virtual Task HandleEventAsync(NotificationEto<NotificationTemplate> eventData) |
|
||||
{ |
|
||||
var notification = await NotificationDefinitionManager.GetOrNullAsync(eventData.Name); |
|
||||
if (notification == null) |
|
||||
{ |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
var culture = eventData.Data.Culture; |
|
||||
if (culture.IsNullOrWhiteSpace()) |
|
||||
{ |
|
||||
culture = CultureInfo.CurrentCulture.Name; |
|
||||
} |
|
||||
using (CultureHelper.Use(culture, culture)) |
|
||||
{ |
|
||||
if (notification.NotificationType == NotificationType.System) |
|
||||
{ |
|
||||
using (CurrentTenant.Change(null)) |
|
||||
{ |
|
||||
await SendToTenantAsync(null, notification, eventData); |
|
||||
|
|
||||
var allActiveTenants = await TenantConfigurationCache.GetTenantsAsync(); |
|
||||
|
|
||||
foreach (var activeTenant in allActiveTenants) |
|
||||
{ |
|
||||
await SendToTenantAsync(activeTenant.Id, notification, eventData); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
await SendToTenantAsync(eventData.TenantId, notification, eventData); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
[UnitOfWork] |
|
||||
public async virtual Task HandleEventAsync(NotificationEto<NotificationData> eventData) |
|
||||
{ |
|
||||
var notification = await NotificationDefinitionManager.GetOrNullAsync(eventData.Name); |
|
||||
if (notification == null) |
|
||||
{ |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
if (notification.NotificationType == NotificationType.System) |
|
||||
{ |
|
||||
using (CurrentTenant.Change(null)) |
|
||||
{ |
|
||||
await SendToTenantAsync(null, notification, eventData); |
|
||||
|
|
||||
var allActiveTenants = await TenantConfigurationCache.GetTenantsAsync(); |
|
||||
|
|
||||
foreach (var activeTenant in allActiveTenants) |
|
||||
{ |
|
||||
await SendToTenantAsync(activeTenant.Id, notification, eventData); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
await SendToTenantAsync(eventData.TenantId, notification, eventData); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
protected async virtual Task SendToTenantAsync( |
|
||||
Guid? tenantId, |
|
||||
NotificationDefinition notification, |
|
||||
NotificationEto<NotificationTemplate> eventData) |
|
||||
{ |
|
||||
using (CurrentTenant.Change(tenantId)) |
|
||||
{ |
|
||||
var providers = Enumerable.Reverse(NotificationPublishProviderManager.Providers); |
|
||||
|
|
||||
// 过滤用户指定提供者
|
|
||||
if (eventData.UseProviders.Any()) |
|
||||
{ |
|
||||
providers = providers.Where(p => eventData.UseProviders.Contains(p.Name)); |
|
||||
} |
|
||||
else if (notification.Providers.Any()) |
|
||||
{ |
|
||||
providers = providers.Where(p => notification.Providers.Contains(p.Name)); |
|
||||
} |
|
||||
|
|
||||
var notificationInfo = new NotificationInfo |
|
||||
{ |
|
||||
Name = notification.Name, |
|
||||
TenantId = tenantId, |
|
||||
Severity = eventData.Severity, |
|
||||
Type = notification.NotificationType, |
|
||||
ContentType = notification.ContentType, |
|
||||
CreationTime = eventData.CreationTime, |
|
||||
Lifetime = notification.NotificationLifetime, |
|
||||
}; |
|
||||
notificationInfo.SetId(eventData.Id); |
|
||||
|
|
||||
var title = notification.DisplayName.Localize(StringLocalizerFactory); |
|
||||
var message = ""; |
|
||||
|
|
||||
try |
|
||||
{ |
|
||||
// 由于模板通知受租户影响, 格式化失败的消息将被丢弃.
|
|
||||
message = await TemplateRenderer.RenderAsync( |
|
||||
templateName: eventData.Data.Name, |
|
||||
model: eventData.Data.ExtraProperties, |
|
||||
cultureName: eventData.Data.Culture, |
|
||||
globalContext: new Dictionary<string, object> |
|
||||
{ |
|
||||
// 模板不支持 $ 字符, 改为普通关键字
|
|
||||
{ NotificationKeywords.Name, notification.Name }, |
|
||||
{ NotificationKeywords.FormUser, eventData.Data.FormUser }, |
|
||||
{ NotificationKeywords.Id, eventData.Id }, |
|
||||
{ NotificationKeywords.Title, title.ToString() }, |
|
||||
{ NotificationKeywords.CreationTime, eventData.CreationTime.ToString(Options.DateTimeFormat) }, |
|
||||
}); |
|
||||
} |
|
||||
catch(Exception ex) |
|
||||
{ |
|
||||
Logger.LogWarning("Formatting template notification failed, message will be discarded, cause :{message}", ex.Message); |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
var notificationData = new NotificationData(); |
|
||||
notificationData.WriteStandardData( |
|
||||
title: title.ToString(), |
|
||||
message: message, |
|
||||
createTime: eventData.CreationTime, |
|
||||
formUser: eventData.Data.FormUser); |
|
||||
notificationData.ExtraProperties.AddIfNotContains(eventData.Data.ExtraProperties); |
|
||||
|
|
||||
notificationInfo.Data = notificationData; |
|
||||
|
|
||||
var subscriptionUsers = await GerSubscriptionUsersAsync( |
|
||||
notificationInfo.Name, |
|
||||
eventData.Users, |
|
||||
tenantId); |
|
||||
|
|
||||
await PersistentNotificationAsync( |
|
||||
notificationInfo, |
|
||||
subscriptionUsers, |
|
||||
providers); |
|
||||
|
|
||||
if (subscriptionUsers.Any()) |
|
||||
{ |
|
||||
// 发布通知
|
|
||||
foreach (var provider in providers) |
|
||||
{ |
|
||||
await PublishToSubscriberAsync(provider, notificationInfo, subscriptionUsers); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
protected async virtual Task SendToTenantAsync( |
|
||||
Guid? tenantId, |
|
||||
NotificationDefinition notification, |
|
||||
NotificationEto<NotificationData> eventData) |
|
||||
{ |
|
||||
using (CurrentTenant.Change(tenantId)) |
|
||||
{ |
|
||||
var providers = Enumerable.Reverse(NotificationPublishProviderManager.Providers); |
|
||||
|
|
||||
// 过滤用户指定提供者
|
|
||||
if (eventData.UseProviders.Any()) |
|
||||
{ |
|
||||
providers = providers.Where(p => eventData.UseProviders.Contains(p.Name)); |
|
||||
} |
|
||||
else if (notification.Providers.Any()) |
|
||||
{ |
|
||||
providers = providers.Where(p => notification.Providers.Contains(p.Name)); |
|
||||
} |
|
||||
|
|
||||
var notificationInfo = new NotificationInfo |
|
||||
{ |
|
||||
Name = notification.Name, |
|
||||
CreationTime = eventData.CreationTime, |
|
||||
Data = eventData.Data, |
|
||||
Severity = eventData.Severity, |
|
||||
Lifetime = notification.NotificationLifetime, |
|
||||
TenantId = tenantId, |
|
||||
Type = notification.NotificationType, |
|
||||
ContentType = notification.ContentType, |
|
||||
}; |
|
||||
notificationInfo.SetId(eventData.Id); |
|
||||
|
|
||||
notificationInfo.Data = NotificationDataSerializer.Serialize(notificationInfo.Data); |
|
||||
|
|
||||
// 获取用户订阅
|
|
||||
var subscriptionUsers = await GerSubscriptionUsersAsync( |
|
||||
notificationInfo.Name, |
|
||||
eventData.Users, |
|
||||
tenantId); |
|
||||
|
|
||||
// 持久化通知
|
|
||||
await PersistentNotificationAsync( |
|
||||
notificationInfo, |
|
||||
subscriptionUsers, |
|
||||
providers); |
|
||||
|
|
||||
if (subscriptionUsers.Any()) |
|
||||
{ |
|
||||
// 发布订阅通知
|
|
||||
foreach (var provider in providers) |
|
||||
{ |
|
||||
await PublishToSubscriberAsync(provider, notificationInfo, subscriptionUsers); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
/// <summary>
|
|
||||
/// 获取用户订阅列表
|
|
||||
/// </summary>
|
|
||||
/// <param name="notificationName">通知名称</param>
|
|
||||
/// <param name="sendToUsers">接收用户列表</param>
|
|
||||
/// <param name="tenantId">租户标识</param>
|
|
||||
/// <returns>用户订阅列表</returns>
|
|
||||
protected async Task<IEnumerable<UserIdentifier>> GerSubscriptionUsersAsync( |
|
||||
string notificationName, |
|
||||
IEnumerable<UserIdentifier> sendToUsers, |
|
||||
Guid? tenantId = null) |
|
||||
{ |
|
||||
try |
|
||||
{ |
|
||||
// 获取用户订阅列表
|
|
||||
var userSubscriptions = await NotificationSubscriptionManager.GetUsersSubscriptionsAsync( |
|
||||
tenantId, |
|
||||
notificationName, |
|
||||
sendToUsers); |
|
||||
|
|
||||
return userSubscriptions.Select(us => new UserIdentifier(us.UserId, us.UserName)); |
|
||||
} |
|
||||
catch(Exception ex) |
|
||||
{ |
|
||||
Logger.LogWarning("Failed to get user subscription, message will not be received by the user, reason: {message}", ex.Message); |
|
||||
} |
|
||||
|
|
||||
return new List<UserIdentifier>(); |
|
||||
} |
|
||||
/// <summary>
|
|
||||
/// 持久化通知并返回订阅用户列表
|
|
||||
/// </summary>
|
|
||||
/// <param name="notificationInfo">通知实体</param>
|
|
||||
/// <param name="subscriptionUsers">订阅用户列表</param>
|
|
||||
/// <param name="sendToProviders">通知发送提供者</param>
|
|
||||
/// <returns>返回订阅者列表</returns>
|
|
||||
protected async Task PersistentNotificationAsync( |
|
||||
NotificationInfo notificationInfo, |
|
||||
IEnumerable<UserIdentifier> subscriptionUsers, |
|
||||
IEnumerable<INotificationPublishProvider> sendToProviders) |
|
||||
{ |
|
||||
try |
|
||||
{ |
|
||||
// 持久化通知
|
|
||||
await NotificationStore.InsertNotificationAsync(notificationInfo); |
|
||||
|
|
||||
if (!subscriptionUsers.Any()) |
|
||||
{ |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
// 持久化用户通知
|
|
||||
await NotificationStore.InsertUserNotificationsAsync(notificationInfo, subscriptionUsers.Select(u => u.UserId)); |
|
||||
|
|
||||
if (notificationInfo.Lifetime == NotificationLifetime.OnlyOne) |
|
||||
{ |
|
||||
// 一次性通知取消用户订阅
|
|
||||
await NotificationStore.DeleteUserSubscriptionAsync( |
|
||||
notificationInfo.TenantId, |
|
||||
subscriptionUsers, |
|
||||
notificationInfo.Name); |
|
||||
} |
|
||||
} |
|
||||
catch (Exception ex) |
|
||||
{ |
|
||||
Logger.LogWarning("Failed to persistent notification failed, reason: {message}", ex.Message); |
|
||||
|
|
||||
foreach (var provider in sendToProviders) |
|
||||
{ |
|
||||
// 处理持久化失败进入后台队列
|
|
||||
await ProcessingFailedToQueueAsync(provider, notificationInfo, subscriptionUsers); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
/// <summary>
|
|
||||
/// 发布订阅者通知
|
|
||||
/// </summary>
|
|
||||
/// <param name="provider">通知发布者</param>
|
|
||||
/// <param name="notificationInfo">通知信息</param>
|
|
||||
/// <param name="subscriptionUserIdentifiers">订阅用户列表</param>
|
|
||||
/// <returns></returns>
|
|
||||
protected async Task PublishToSubscriberAsync( |
|
||||
INotificationPublishProvider provider, |
|
||||
NotificationInfo notificationInfo, |
|
||||
IEnumerable<UserIdentifier> subscriptionUsers) |
|
||||
{ |
|
||||
try |
|
||||
{ |
|
||||
Logger.LogDebug($"Sending notification with provider {provider.Name}"); |
|
||||
|
|
||||
// 2024-10-10: 框架层面应该取消通知数据转换,而是交给提供商来实现
|
|
||||
//var notifacationDataMapping = Options.NotificationDataMappings
|
|
||||
// .GetMapItemOrDefault(provider.Name, notificationInfo.Name);
|
|
||||
//if (notifacationDataMapping != null)
|
|
||||
//{
|
|
||||
// notificationInfo.Data = notifacationDataMapping.MappingFunc(notificationInfo.Data);
|
|
||||
//}
|
|
||||
|
|
||||
// 发布
|
|
||||
await provider.PublishAsync(notificationInfo, subscriptionUsers); |
|
||||
|
|
||||
Logger.LogDebug($"Send notification {notificationInfo.Name} with provider {provider.Name} was successful"); |
|
||||
} |
|
||||
catch (Exception ex) |
|
||||
{ |
|
||||
Logger.LogWarning($"Send notification error with provider {provider.Name}"); |
|
||||
Logger.LogWarning($"Error message:{ex.Message}"); |
|
||||
Logger.LogDebug($"Failed to send notification {notificationInfo.Name}. Try to push notification to background job"); |
|
||||
// 发送失败的消息进入后台队列
|
|
||||
await ProcessingFailedToQueueAsync(provider, notificationInfo, subscriptionUsers); |
|
||||
} |
|
||||
} |
|
||||
/// <summary>
|
|
||||
/// 处理失败的消息进入后台队列
|
|
||||
/// </summary>
|
|
||||
/// <remarks>
|
|
||||
/// 注: 如果入队失败,消息将被丢弃.
|
|
||||
/// </remarks>
|
|
||||
/// <param name="provider"></param>
|
|
||||
/// <param name="notificationInfo"></param>
|
|
||||
/// <param name="subscriptionUsers"></param>
|
|
||||
/// <returns></returns>
|
|
||||
protected async Task ProcessingFailedToQueueAsync( |
|
||||
INotificationPublishProvider provider, |
|
||||
NotificationInfo notificationInfo, |
|
||||
IEnumerable<UserIdentifier> subscriptionUsers) |
|
||||
{ |
|
||||
try |
|
||||
{ |
|
||||
// 发送失败的消息进入后台队列
|
|
||||
await BackgroundJobManager.EnqueueAsync( |
|
||||
new NotificationPublishJobArgs( |
|
||||
notificationInfo.GetId(), |
|
||||
provider.GetType().AssemblyQualifiedName, |
|
||||
subscriptionUsers.ToList(), |
|
||||
notificationInfo.TenantId)); |
|
||||
} |
|
||||
catch(Exception ex) |
|
||||
{ |
|
||||
Logger.LogWarning("Failed to push to background job, notification will be discarded, error cause: {message}", ex.Message); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,53 +0,0 @@ |
|||||
using LINGYUN.Abp.Saas.Tenants; |
|
||||
using PackageName.CompanyName.ProjectName.AIO.Host.MultiTenancy; |
|
||||
using Volo.Abp.Data; |
|
||||
using Volo.Abp.DependencyInjection; |
|
||||
using Volo.Abp.Domain.Entities.Events.Distributed; |
|
||||
using Volo.Abp.EventBus.Distributed; |
|
||||
using Volo.Abp.MultiTenancy; |
|
||||
using Volo.Abp.Uow; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.EventBus.Distributed |
|
||||
{ |
|
||||
public class TenantSynchronizer : |
|
||||
IDistributedEventHandler<EntityCreatedEto<TenantEto>>, |
|
||||
IDistributedEventHandler<EntityUpdatedEto<TenantEto>>, |
|
||||
IDistributedEventHandler<EntityDeletedEto<TenantEto>>, |
|
||||
IDistributedEventHandler<TenantConnectionStringUpdatedEto>, |
|
||||
ITransientDependency |
|
||||
{ |
|
||||
protected IDataSeeder DataSeeder { get; } |
|
||||
protected ITenantConfigurationCache TenantConfigurationCache { get; } |
|
||||
|
|
||||
public TenantSynchronizer( |
|
||||
IDataSeeder dataSeeder, |
|
||||
ITenantConfigurationCache tenantConfigurationCache) |
|
||||
{ |
|
||||
DataSeeder = dataSeeder; |
|
||||
TenantConfigurationCache = tenantConfigurationCache; |
|
||||
} |
|
||||
|
|
||||
[UnitOfWork] |
|
||||
public async virtual Task HandleEventAsync(EntityCreatedEto<TenantEto> eventData) |
|
||||
{ |
|
||||
await TenantConfigurationCache.RefreshAsync(); |
|
||||
|
|
||||
await DataSeeder.SeedAsync(eventData.Entity.Id); |
|
||||
} |
|
||||
|
|
||||
public async virtual Task HandleEventAsync(EntityUpdatedEto<TenantEto> eventData) |
|
||||
{ |
|
||||
await TenantConfigurationCache.RefreshAsync(); |
|
||||
} |
|
||||
|
|
||||
public async virtual Task HandleEventAsync(EntityDeletedEto<TenantEto> eventData) |
|
||||
{ |
|
||||
await TenantConfigurationCache.RefreshAsync(); |
|
||||
} |
|
||||
|
|
||||
public async virtual Task HandleEventAsync(TenantConnectionStringUpdatedEto eventData) |
|
||||
{ |
|
||||
await TenantConfigurationCache.RefreshAsync(); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,30 +0,0 @@ |
|||||
using Volo.Abp.DependencyInjection; |
|
||||
using Volo.Abp.Domain.Entities.Events; |
|
||||
using Volo.Abp.Domain.Entities.Events.Distributed; |
|
||||
using Volo.Abp.EventBus.Distributed; |
|
||||
using Volo.Abp.EventBus.Local; |
|
||||
using Volo.Abp.Users; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.EventBus.Distributed |
|
||||
{ |
|
||||
public class UserCreateEventHandler : IDistributedEventHandler<EntityCreatedEto<UserEto>>, ITransientDependency |
|
||||
{ |
|
||||
private readonly ILocalEventBus _localEventBus; |
|
||||
public UserCreateEventHandler( |
|
||||
ILocalEventBus localEventBus) |
|
||||
{ |
|
||||
_localEventBus = localEventBus; |
|
||||
} |
|
||||
/// <summary>
|
|
||||
/// 接收添加用户事件,发布本地事件
|
|
||||
/// </summary>
|
|
||||
/// <param name="eventData"></param>
|
|
||||
/// <returns></returns>
|
|
||||
public async Task HandleEventAsync(EntityCreatedEto<UserEto> eventData) |
|
||||
{ |
|
||||
var localUserCreateEventData = new EntityCreatedEventData<UserEto>(eventData.Entity); |
|
||||
|
|
||||
await _localEventBus.PublishAsync(localUserCreateEventData); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,112 +0,0 @@ |
|||||
using LINGYUN.Abp.Webhooks; |
|
||||
using LINGYUN.Abp.Webhooks.EventBus; |
|
||||
using Volo.Abp.BackgroundJobs; |
|
||||
using Volo.Abp.DependencyInjection; |
|
||||
using Volo.Abp.EventBus.Distributed; |
|
||||
using Volo.Abp.MultiTenancy; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.EventBus.Distributed; |
|
||||
|
|
||||
public class WebhooksEventHandler : |
|
||||
IDistributedEventHandler<WebhooksEventData>, |
|
||||
ITransientDependency |
|
||||
{ |
|
||||
public IWebhookEventStore WebhookEventStore { get; set; } |
|
||||
|
|
||||
private readonly ICurrentTenant _currentTenant; |
|
||||
private readonly IBackgroundJobManager _backgroundJobManager; |
|
||||
private readonly IWebhookSubscriptionManager _webhookSubscriptionManager; |
|
||||
|
|
||||
public WebhooksEventHandler( |
|
||||
IWebhookSubscriptionManager webhookSubscriptionManager, |
|
||||
ICurrentTenant currentTenant, |
|
||||
IBackgroundJobManager backgroundJobManager) |
|
||||
{ |
|
||||
_currentTenant = currentTenant; |
|
||||
_backgroundJobManager = backgroundJobManager; |
|
||||
_webhookSubscriptionManager = webhookSubscriptionManager; |
|
||||
|
|
||||
WebhookEventStore = NullWebhookEventStore.Instance; |
|
||||
} |
|
||||
|
|
||||
public async virtual Task HandleEventAsync(WebhooksEventData eventData) |
|
||||
{ |
|
||||
var subscriptions = await _webhookSubscriptionManager |
|
||||
.GetAllSubscriptionsOfTenantsIfFeaturesGrantedAsync( |
|
||||
eventData.TenantIds, |
|
||||
eventData.WebhookName); |
|
||||
|
|
||||
await PublishAsync(eventData.WebhookName, eventData.Data, subscriptions, eventData.SendExactSameData, eventData.Headers); |
|
||||
} |
|
||||
|
|
||||
protected async virtual Task PublishAsync( |
|
||||
string webhookName, |
|
||||
string data, |
|
||||
List<WebhookSubscriptionInfo> webhookSubscriptions, |
|
||||
bool sendExactSameData = false, |
|
||||
WebhookHeader headers = null) |
|
||||
{ |
|
||||
if (webhookSubscriptions.IsNullOrEmpty()) |
|
||||
{ |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
var subscriptionsGroupedByTenant = webhookSubscriptions.GroupBy(x => x.TenantId); |
|
||||
|
|
||||
foreach (var subscriptionGroupedByTenant in subscriptionsGroupedByTenant) |
|
||||
{ |
|
||||
var webhookInfo = await SaveAndGetWebhookAsync(subscriptionGroupedByTenant.Key, webhookName, data); |
|
||||
|
|
||||
foreach (var webhookSubscription in subscriptionGroupedByTenant) |
|
||||
{ |
|
||||
var headersToSend = webhookSubscription.Headers; |
|
||||
if (headers != null) |
|
||||
{ |
|
||||
if (headers.UseOnlyGivenHeaders)//do not use the headers defined in subscription
|
|
||||
{ |
|
||||
headersToSend = headers.Headers; |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
//use the headers defined in subscription. If additional headers has same header, use additional headers value.
|
|
||||
foreach (var additionalHeader in headers.Headers) |
|
||||
{ |
|
||||
headersToSend[additionalHeader.Key] = additionalHeader.Value; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
await _backgroundJobManager.EnqueueAsync(new WebhookSenderArgs |
|
||||
{ |
|
||||
TenantId = webhookSubscription.TenantId, |
|
||||
WebhookEventId = webhookInfo.Id, |
|
||||
Data = webhookInfo.Data, |
|
||||
WebhookName = webhookInfo.WebhookName, |
|
||||
WebhookSubscriptionId = webhookSubscription.Id, |
|
||||
Headers = headersToSend, |
|
||||
Secret = webhookSubscription.Secret, |
|
||||
WebhookUri = webhookSubscription.WebhookUri, |
|
||||
SendExactSameData = sendExactSameData |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
protected async virtual Task<WebhookEvent> SaveAndGetWebhookAsync( |
|
||||
Guid? tenantId, |
|
||||
string webhookName, |
|
||||
string data) |
|
||||
{ |
|
||||
var webhookInfo = new WebhookEvent |
|
||||
{ |
|
||||
WebhookName = webhookName, |
|
||||
Data = data, |
|
||||
TenantId = tenantId |
|
||||
}; |
|
||||
|
|
||||
var webhookId = await WebhookEventStore.InsertAndGetIdAsync(webhookInfo); |
|
||||
webhookInfo.Id = webhookId; |
|
||||
|
|
||||
return webhookInfo; |
|
||||
} |
|
||||
} |
|
||||
@ -1,58 +0,0 @@ |
|||||
using LINGYUN.Abp.MessageService.Chat; |
|
||||
using LINGYUN.Abp.MessageService.Notifications; |
|
||||
using LINGYUN.Abp.Notifications; |
|
||||
using Volo.Abp.DependencyInjection; |
|
||||
using Volo.Abp.Domain.Entities.Events; |
|
||||
using Volo.Abp.EventBus; |
|
||||
using Volo.Abp.Uow; |
|
||||
using Volo.Abp.Users; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.EventBus.Local |
|
||||
{ |
|
||||
public class UserCreateJoinIMEventHandler : ILocalEventHandler<EntityCreatedEventData<UserEto>>, ITransientDependency |
|
||||
{ |
|
||||
private readonly IChatDataSeeder _chatDataSeeder; |
|
||||
private readonly INotificationSubscriptionManager _notificationSubscriptionManager; |
|
||||
public UserCreateJoinIMEventHandler( |
|
||||
IChatDataSeeder chatDataSeeder, |
|
||||
INotificationSubscriptionManager notificationSubscriptionManager) |
|
||||
{ |
|
||||
_chatDataSeeder = chatDataSeeder; |
|
||||
_notificationSubscriptionManager = notificationSubscriptionManager; |
|
||||
} |
|
||||
/// <summary>
|
|
||||
/// 接收添加用户事件,初始化IM用户种子
|
|
||||
/// </summary>
|
|
||||
/// <param name="eventData"></param>
|
|
||||
/// <returns></returns>
|
|
||||
[UnitOfWork] |
|
||||
public async virtual Task HandleEventAsync(EntityCreatedEventData<UserEto> eventData) |
|
||||
{ |
|
||||
await SeedChatDataAsync(eventData.Entity); |
|
||||
|
|
||||
await SeedUserSubscriptionNotifiersAsync(eventData.Entity); |
|
||||
} |
|
||||
|
|
||||
protected async virtual Task SeedChatDataAsync(IUserData user) |
|
||||
{ |
|
||||
await _chatDataSeeder.SeedAsync(user); |
|
||||
} |
|
||||
|
|
||||
protected async virtual Task SeedUserSubscriptionNotifiersAsync(IUserData user) |
|
||||
{ |
|
||||
var userIdentifier = new UserIdentifier(user.Id, user.UserName); |
|
||||
|
|
||||
await _notificationSubscriptionManager |
|
||||
.SubscribeAsync( |
|
||||
user.TenantId, |
|
||||
userIdentifier, |
|
||||
MessageServiceNotificationNames.IM.FriendValidation); |
|
||||
|
|
||||
await _notificationSubscriptionManager |
|
||||
.SubscribeAsync( |
|
||||
user.TenantId, |
|
||||
userIdentifier, |
|
||||
MessageServiceNotificationNames.IM.NewFriend); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,69 +0,0 @@ |
|||||
using LINGYUN.Abp.Notifications; |
|
||||
using Volo.Abp.DependencyInjection; |
|
||||
using Volo.Abp.Domain.Entities.Events; |
|
||||
using Volo.Abp.EventBus; |
|
||||
using Volo.Abp.Users; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.EventBus.Local |
|
||||
{ |
|
||||
public class UserCreateSendWelcomeEventHandler : ILocalEventHandler<EntityCreatedEventData<UserEto>>, ITransientDependency |
|
||||
{ |
|
||||
private readonly INotificationSender _notificationSender; |
|
||||
private readonly INotificationSubscriptionManager _notificationSubscriptionManager; |
|
||||
public UserCreateSendWelcomeEventHandler( |
|
||||
INotificationSender notificationSender, |
|
||||
INotificationSubscriptionManager notificationSubscriptionManager |
|
||||
) |
|
||||
{ |
|
||||
_notificationSender = notificationSender; |
|
||||
_notificationSubscriptionManager = notificationSubscriptionManager; |
|
||||
} |
|
||||
|
|
||||
public async Task HandleEventAsync(EntityCreatedEventData<UserEto> eventData) |
|
||||
{ |
|
||||
var userIdentifer = new UserIdentifier(eventData.Entity.Id, eventData.Entity.UserName); |
|
||||
// 订阅用户欢迎消息
|
|
||||
await SubscribeInternalNotifers(userIdentifer, eventData.Entity.TenantId); |
|
||||
|
|
||||
await _notificationSender.SendNofiterAsync( |
|
||||
UserNotificationNames.WelcomeToApplication, |
|
||||
new NotificationTemplate( |
|
||||
UserNotificationNames.WelcomeToApplication, |
|
||||
formUser: eventData.Entity.UserName, |
|
||||
data: new Dictionary<string, object> |
|
||||
{ |
|
||||
{ "name", eventData.Entity.UserName }, |
|
||||
}), |
|
||||
userIdentifer, |
|
||||
eventData.Entity.TenantId, |
|
||||
NotificationSeverity.Info); |
|
||||
} |
|
||||
|
|
||||
private async Task SubscribeInternalNotifers(UserIdentifier userIdentifer, Guid? tenantId = null) |
|
||||
{ |
|
||||
// 订阅内置通知
|
|
||||
await _notificationSubscriptionManager |
|
||||
.SubscribeAsync( |
|
||||
tenantId, |
|
||||
userIdentifer, |
|
||||
DefaultNotifications.SystemNotice); |
|
||||
await _notificationSubscriptionManager |
|
||||
.SubscribeAsync( |
|
||||
tenantId, |
|
||||
userIdentifer, |
|
||||
DefaultNotifications.OnsideNotice); |
|
||||
await _notificationSubscriptionManager |
|
||||
.SubscribeAsync( |
|
||||
tenantId, |
|
||||
userIdentifer, |
|
||||
DefaultNotifications.ActivityNotice); |
|
||||
|
|
||||
// 订阅用户欢迎消息
|
|
||||
await _notificationSubscriptionManager |
|
||||
.SubscribeAsync( |
|
||||
tenantId, |
|
||||
userIdentifer, |
|
||||
UserNotificationNames.WelcomeToApplication); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,19 +0,0 @@ |
|||||
using LINGYUN.Abp.Identity; |
|
||||
using IdentityServer4.Models; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.IdentityResources; |
|
||||
|
|
||||
public class CustomIdentityResources |
|
||||
{ |
|
||||
public class AvatarUrl : IdentityResource |
|
||||
{ |
|
||||
public AvatarUrl() |
|
||||
{ |
|
||||
Name = IdentityConsts.ClaimType.Avatar.Name; |
|
||||
DisplayName = IdentityConsts.ClaimType.Avatar.DisplayName; |
|
||||
Description = IdentityConsts.ClaimType.Avatar.Description; |
|
||||
Emphasize = true; |
|
||||
UserClaims = new string[] { IdentityConsts.ClaimType.Avatar.Name }; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,935 +0,0 @@ |
|||||
using Elsa; |
|
||||
using Elsa.Options; |
|
||||
using LINGYUN.Abp.Aliyun.Localization; |
|
||||
using LINGYUN.Abp.BackgroundTasks; |
|
||||
using LINGYUN.Abp.DataProtectionManagement; |
|
||||
using LINGYUN.Abp.ExceptionHandling; |
|
||||
using LINGYUN.Abp.ExceptionHandling.Emailing; |
|
||||
using LINGYUN.Abp.Exporter.MiniExcel; |
|
||||
using LINGYUN.Abp.Idempotent; |
|
||||
using LINGYUN.Abp.Identity.Session; |
|
||||
using LINGYUN.Abp.IdentityServer.IdentityResources; |
|
||||
using LINGYUN.Abp.Localization.CultureMap; |
|
||||
using LINGYUN.Abp.Notifications; |
|
||||
using LINGYUN.Abp.OpenIddict.AspNetCore.Session; |
|
||||
using LINGYUN.Abp.OpenIddict.LinkUser; |
|
||||
using LINGYUN.Abp.OpenIddict.Permissions; |
|
||||
using LINGYUN.Abp.OpenIddict.Portal; |
|
||||
using LINGYUN.Abp.OpenIddict.Sms; |
|
||||
using LINGYUN.Abp.OpenIddict.WeChat; |
|
||||
using LINGYUN.Abp.Saas; |
|
||||
using LINGYUN.Abp.Serilog.Enrichers.Application; |
|
||||
using LINGYUN.Abp.Serilog.Enrichers.UniqueId; |
|
||||
using LINGYUN.Abp.Tencent.Localization; |
|
||||
using LINGYUN.Abp.TextTemplating; |
|
||||
using LINGYUN.Abp.WebhooksManagement; |
|
||||
using LINGYUN.Abp.WeChat.Common.Messages.Handlers; |
|
||||
using LINGYUN.Abp.WeChat.Localization; |
|
||||
using LINGYUN.Abp.WeChat.Work; |
|
||||
using LINGYUN.Abp.Wrapper; |
|
||||
using LINGYUN.Platform.Localization; |
|
||||
using PackageName.CompanyName.ProjectName.AIO.Host.Microsoft.Extensions.DependencyInjection; |
|
||||
using Medallion.Threading; |
|
||||
using Medallion.Threading.Redis; |
|
||||
using Microsoft.AspNetCore.Authentication.Cookies; |
|
||||
using Microsoft.AspNetCore.Authentication.JwtBearer; |
|
||||
using Microsoft.AspNetCore.Cors; |
|
||||
using Microsoft.AspNetCore.DataProtection; |
|
||||
using Microsoft.AspNetCore.Identity; |
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core; |
|
||||
using Microsoft.Extensions.Caching.StackExchangeRedis; |
|
||||
using Microsoft.IdentityModel.Logging; |
|
||||
using Microsoft.OpenApi.Models; |
|
||||
using MiniExcelLibs.Attributes; |
|
||||
using OpenIddict.Server; |
|
||||
using OpenIddict.Server.AspNetCore; |
|
||||
using PackageName.CompanyName.ProjectName.AIO.Host.Authentication; |
|
||||
using PackageName.CompanyName.ProjectName.AIO.Host.IdentityResources; |
|
||||
using PackageName.CompanyName.ProjectName.AIO.Host.WeChat.Official.Messages; |
|
||||
using Quartz; |
|
||||
using StackExchange.Redis; |
|
||||
using System.Security.Cryptography; |
|
||||
using System.Security.Cryptography.X509Certificates; |
|
||||
using System.Text.Encodings.Web; |
|
||||
using System.Text.Unicode; |
|
||||
using Volo.Abp; |
|
||||
using Volo.Abp.AspNetCore.Mvc; |
|
||||
using Volo.Abp.AspNetCore.Mvc.AntiForgery; |
|
||||
using Volo.Abp.AspNetCore.Mvc.UI.Bundling; |
|
||||
using Volo.Abp.Auditing; |
|
||||
using Volo.Abp.Authorization.Permissions; |
|
||||
using Volo.Abp.BlobStoring; |
|
||||
using Volo.Abp.BlobStoring.FileSystem; |
|
||||
using Volo.Abp.Caching; |
|
||||
using Volo.Abp.EntityFrameworkCore; |
|
||||
using Volo.Abp.FeatureManagement; |
|
||||
using Volo.Abp.Features; |
|
||||
using Volo.Abp.GlobalFeatures; |
|
||||
using Volo.Abp.Http.Client; |
|
||||
using Volo.Abp.Identity.Localization; |
|
||||
using Volo.Abp.IdentityServer; |
|
||||
using Volo.Abp.IdentityServer.Localization; |
|
||||
using Volo.Abp.Json; |
|
||||
using Volo.Abp.Json.SystemTextJson; |
|
||||
using Volo.Abp.Localization; |
|
||||
using Volo.Abp.MultiTenancy; |
|
||||
using Volo.Abp.OpenIddict; |
|
||||
using Volo.Abp.OpenIddict.Localization; |
|
||||
using Volo.Abp.PermissionManagement; |
|
||||
using Volo.Abp.Quartz; |
|
||||
using Volo.Abp.Security.Claims; |
|
||||
using Volo.Abp.SettingManagement; |
|
||||
using Volo.Abp.SettingManagement.Localization; |
|
||||
using Volo.Abp.Threading; |
|
||||
using Volo.Abp.UI.Navigation.Urls; |
|
||||
using Volo.Abp.VirtualFileSystem; |
|
||||
using VoloAbpExceptionHandlingOptions = Volo.Abp.AspNetCore.ExceptionHandling.AbpExceptionHandlingOptions; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host; |
|
||||
|
|
||||
public partial class MicroServiceApplicationsSingleModule |
|
||||
{ |
|
||||
protected const string DefaultCorsPolicyName = "Default"; |
|
||||
public static string ApplicationName { get; set; } = "MicroService-Applications-Single"; |
|
||||
private readonly static OneTimeRunner OneTimeRunner = new(); |
|
||||
|
|
||||
private void PreConfigureFeature() |
|
||||
{ |
|
||||
OneTimeRunner.Run(() => |
|
||||
{ |
|
||||
GlobalFeatureManager.Instance.Modules.Editions().EnableAll(); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void PreConfigureApp(IConfiguration configuration) |
|
||||
{ |
|
||||
AbpSerilogEnrichersConsts.ApplicationName = ApplicationName; |
|
||||
|
|
||||
PreConfigure<AbpSerilogEnrichersUniqueIdOptions>(options => |
|
||||
{ |
|
||||
// 以开放端口区别,应在0-31之间
|
|
||||
options.SnowflakeIdOptions.WorkerId = 1; |
|
||||
options.SnowflakeIdOptions.WorkerIdBits = 5; |
|
||||
options.SnowflakeIdOptions.DatacenterId = 1; |
|
||||
}); |
|
||||
|
|
||||
if (configuration.GetValue<bool>("App:ShowPii")) |
|
||||
{ |
|
||||
IdentityModelEventSource.ShowPII = true; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private void PreConfigureAuthServer(IConfiguration configuration) |
|
||||
{ |
|
||||
PreConfigure<OpenIddictBuilder>(builder => |
|
||||
{ |
|
||||
builder.AddValidation(options => |
|
||||
{ |
|
||||
//options.AddAudiences("lingyun-abp-application");
|
|
||||
|
|
||||
options.UseLocalServer(); |
|
||||
|
|
||||
options.UseAspNetCore(); |
|
||||
|
|
||||
options.UseDataProtection(); |
|
||||
}); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void PreConfigureIdentity() |
|
||||
{ |
|
||||
PreConfigure<IdentityBuilder>(builder => |
|
||||
{ |
|
||||
builder.AddDefaultTokenProviders(); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void PreConfigureCertificate(IConfiguration configuration, IWebHostEnvironment environment) |
|
||||
{ |
|
||||
var cerConfig = configuration.GetSection("Certificates"); |
|
||||
if (environment.IsProduction() && cerConfig.Exists()) |
|
||||
{ |
|
||||
// 开发环境下存在证书配置
|
|
||||
// 且证书文件存在则使用自定义的证书文件来启动Ids服务器
|
|
||||
var cerPath = Path.Combine(environment.ContentRootPath, cerConfig["CerPath"]); |
|
||||
if (File.Exists(cerPath)) |
|
||||
{ |
|
||||
var certificate = new X509Certificate2(cerPath, cerConfig["Password"]); |
|
||||
|
|
||||
if (configuration.GetValue<bool>("AuthServer:UseOpenIddict")) |
|
||||
{ |
|
||||
PreConfigure<AbpOpenIddictAspNetCoreOptions>(options => |
|
||||
{ |
|
||||
//https://documentation.openiddict.com/configuration/encryption-and-signing-credentials.html
|
|
||||
options.AddDevelopmentEncryptionAndSigningCertificate = false; |
|
||||
}); |
|
||||
|
|
||||
PreConfigure<OpenIddictServerBuilder>(builder => |
|
||||
{ |
|
||||
builder.AddSigningCertificate(certificate); |
|
||||
builder.AddEncryptionCertificate(certificate); |
|
||||
|
|
||||
builder.UseDataProtection(); |
|
||||
|
|
||||
// 禁用https
|
|
||||
builder.UseAspNetCore() |
|
||||
.DisableTransportSecurityRequirement(); |
|
||||
}); |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
PreConfigure<AbpIdentityServerBuilderOptions>(options => |
|
||||
{ |
|
||||
options.AddDeveloperSigningCredential = false; |
|
||||
}); |
|
||||
|
|
||||
PreConfigure<IIdentityServerBuilder>(builder => |
|
||||
{ |
|
||||
builder.AddSigningCredential(certificate); |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
if (configuration.GetValue<bool>("AuthServer:UseOpenIddict")) |
|
||||
{ |
|
||||
PreConfigure<AbpOpenIddictAspNetCoreOptions>(options => |
|
||||
{ |
|
||||
//https://documentation.openiddict.com/configuration/encryption-and-signing-credentials.html
|
|
||||
options.AddDevelopmentEncryptionAndSigningCertificate = false; |
|
||||
}); |
|
||||
|
|
||||
PreConfigure<OpenIddictServerBuilder>(builder => |
|
||||
{ |
|
||||
//https://documentation.openiddict.com/configuration/encryption-and-signing-credentials.html
|
|
||||
using (var algorithm = RSA.Create(keySizeInBits: 2048)) |
|
||||
{ |
|
||||
var subject = new X500DistinguishedName("CN=Fabrikam Encryption Certificate"); |
|
||||
var request = new CertificateRequest(subject, algorithm, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); |
|
||||
request.CertificateExtensions.Add(new X509KeyUsageExtension(X509KeyUsageFlags.DigitalSignature, critical: true)); |
|
||||
var certificate = request.CreateSelfSigned(DateTimeOffset.UtcNow, DateTimeOffset.UtcNow.AddYears(2)); |
|
||||
builder.AddSigningCertificate(certificate); |
|
||||
} |
|
||||
|
|
||||
using (var algorithm = RSA.Create(keySizeInBits: 2048)) |
|
||||
{ |
|
||||
var subject = new X500DistinguishedName("CN=Fabrikam Signing Certificate"); |
|
||||
var request = new CertificateRequest(subject, algorithm, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); |
|
||||
request.CertificateExtensions.Add(new X509KeyUsageExtension(X509KeyUsageFlags.KeyEncipherment, critical: true)); |
|
||||
var certificate = request.CreateSelfSigned(DateTimeOffset.UtcNow, DateTimeOffset.UtcNow.AddYears(2)); |
|
||||
builder.AddEncryptionCertificate(certificate); |
|
||||
} |
|
||||
|
|
||||
builder.UseDataProtection(); |
|
||||
|
|
||||
// 禁用https
|
|
||||
builder.UseAspNetCore() |
|
||||
.DisableTransportSecurityRequirement(); |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private void PreConfigureQuartz(IConfiguration configuration) |
|
||||
{ |
|
||||
PreConfigure<AbpQuartzOptions>(options => |
|
||||
{ |
|
||||
// 如果使用持久化存储, 则配置quartz持久层
|
|
||||
if (configuration.GetSection("Quartz:UsePersistentStore").Get<bool>()) |
|
||||
{ |
|
||||
var settings = configuration.GetSection("Quartz:Properties").Get<Dictionary<string, string>>(); |
|
||||
if (settings != null) |
|
||||
{ |
|
||||
foreach (var setting in settings) |
|
||||
{ |
|
||||
options.Properties[setting.Key] = setting.Value; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
options.Configurator += (config) => |
|
||||
{ |
|
||||
config.UsePersistentStore(store => |
|
||||
{ |
|
||||
store.UseProperties = false; |
|
||||
store.UseNewtonsoftJsonSerializer(); |
|
||||
}); |
|
||||
}; |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void PreConfigureElsa(IServiceCollection services, IConfiguration configuration) |
|
||||
{ |
|
||||
var elsaSection = configuration.GetSection("Elsa"); |
|
||||
var startups = new[] |
|
||||
{ |
|
||||
typeof(Elsa.Activities.Console.Startup), |
|
||||
typeof(Elsa.Activities.Http.Startup), |
|
||||
typeof(Elsa.Activities.UserTask.Startup), |
|
||||
typeof(Elsa.Activities.Temporal.Quartz.Startup), |
|
||||
typeof(Elsa.Activities.Email.Startup), |
|
||||
typeof(Elsa.Scripting.JavaScript.Startup), |
|
||||
typeof(Elsa.Activities.Webhooks.Startup), |
|
||||
}; |
|
||||
|
|
||||
PreConfigure<ElsaOptionsBuilder>(elsa => |
|
||||
{ |
|
||||
elsa |
|
||||
.AddActivitiesFrom<MicroServiceApplicationsSingleModule>() |
|
||||
.AddWorkflowsFrom<MicroServiceApplicationsSingleModule>() |
|
||||
.AddFeatures(startups, configuration) |
|
||||
.ConfigureWorkflowChannels(options => elsaSection.GetSection("WorkflowChannels").Bind(options)); |
|
||||
|
|
||||
elsa.DistributedLockingOptionsBuilder |
|
||||
.UseProviderFactory(sp => name => |
|
||||
{ |
|
||||
var provider = sp.GetRequiredService<IDistributedLockProvider>(); |
|
||||
|
|
||||
return provider.CreateLock(name); |
|
||||
}); |
|
||||
}); |
|
||||
|
|
||||
services.AddNotificationHandlersFrom<MicroServiceApplicationsSingleModule>(); |
|
||||
|
|
||||
PreConfigure<IMvcBuilder>(mvcBuilder => |
|
||||
{ |
|
||||
mvcBuilder.AddApplicationPartIfNotExists(typeof(Elsa.Webhooks.Api.Endpoints.List).Assembly); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureAuthServer(IConfiguration configuration) |
|
||||
{ |
|
||||
Configure<OpenIddictServerAspNetCoreBuilder>(builder => |
|
||||
{ |
|
||||
builder.DisableTransportSecurityRequirement(); |
|
||||
}); |
|
||||
|
|
||||
Configure<OpenIddictServerAspNetCoreOptions>(options => |
|
||||
{ |
|
||||
options.DisableTransportSecurityRequirement = true; |
|
||||
}); |
|
||||
|
|
||||
Configure<OpenIddictServerOptions>(options => |
|
||||
{ |
|
||||
var lifetime = configuration.GetSection("OpenIddict:Lifetime"); |
|
||||
options.AuthorizationCodeLifetime = lifetime.GetValue("AuthorizationCode", options.AuthorizationCodeLifetime); |
|
||||
options.AccessTokenLifetime = lifetime.GetValue("AccessToken", options.AccessTokenLifetime); |
|
||||
options.DeviceCodeLifetime = lifetime.GetValue("DeviceCode", options.DeviceCodeLifetime); |
|
||||
options.IdentityTokenLifetime = lifetime.GetValue("IdentityToken", options.IdentityTokenLifetime); |
|
||||
options.RefreshTokenLifetime = lifetime.GetValue("RefreshToken", options.RefreshTokenLifetime); |
|
||||
options.RefreshTokenReuseLeeway = lifetime.GetValue("RefreshTokenReuseLeeway", options.RefreshTokenReuseLeeway); |
|
||||
options.UserCodeLifetime = lifetime.GetValue("UserCode", options.UserCodeLifetime); |
|
||||
}); |
|
||||
Configure<AbpOpenIddictAspNetCoreSessionOptions>(options => |
|
||||
{ |
|
||||
options.PersistentSessionGrantTypes.Add(SmsTokenExtensionGrantConsts.GrantType); |
|
||||
options.PersistentSessionGrantTypes.Add(PortalTokenExtensionGrantConsts.GrantType); |
|
||||
options.PersistentSessionGrantTypes.Add(LinkUserTokenExtensionGrantConsts.GrantType); |
|
||||
options.PersistentSessionGrantTypes.Add(WeChatTokenExtensionGrantConsts.OfficialGrantType); |
|
||||
options.PersistentSessionGrantTypes.Add(WeChatTokenExtensionGrantConsts.MiniProgramGrantType); |
|
||||
options.PersistentSessionGrantTypes.Add(AbpWeChatWorkGlobalConsts.GrantType); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureEndpoints(IServiceCollection services) |
|
||||
{ |
|
||||
// 不需要
|
|
||||
//Configure<AbpEndpointRouterOptions>(options =>
|
|
||||
//{
|
|
||||
// options.EndpointConfigureActions.Add(
|
|
||||
// (context) =>
|
|
||||
// {
|
|
||||
// context.Endpoints.MapFallbackToPage("/_Host");
|
|
||||
// });
|
|
||||
//});
|
|
||||
var preActions = services.GetPreConfigureActions<AbpAspNetCoreMvcOptions>(); |
|
||||
|
|
||||
services.AddAbpApiVersioning(options => |
|
||||
{ |
|
||||
options.ReportApiVersions = true; |
|
||||
options.AssumeDefaultVersionWhenUnspecified = true; |
|
||||
|
|
||||
//options.ApiVersionReader = new HeaderApiVersionReader("api-version"); //Supports header too
|
|
||||
//options.ApiVersionReader = new MediaTypeApiVersionReader(); //Supports accept header too
|
|
||||
}, mvcOptions => |
|
||||
{ |
|
||||
mvcOptions.ConfigureAbp(preActions.Configure()); |
|
||||
}); |
|
||||
|
|
||||
//services.AddApiVersioning(config =>
|
|
||||
//{
|
|
||||
// // Specify the default API Version as 1.0
|
|
||||
// config.DefaultApiVersion = new ApiVersion(1, 0);
|
|
||||
// // Advertise the API versions supported for the particular endpoint (through 'api-supported-versions' response header which lists all available API versions for that endpoint)
|
|
||||
// config.ReportApiVersions = true;
|
|
||||
//});
|
|
||||
|
|
||||
//services.AddVersionedApiExplorer(options =>
|
|
||||
//{
|
|
||||
// // add the versioned api explorer, which also adds IApiVersionDescriptionProvider service
|
|
||||
// // note: the specified format code will format the version as "'v'major[.minor][-status]"
|
|
||||
// options.GroupNameFormat = "'v'VVV";
|
|
||||
|
|
||||
// // note: this option is only necessary when versioning by url segment. the SubstitutionFormat
|
|
||||
// // can also be used to control the format of the API version in route templates
|
|
||||
// options.SubstituteApiVersionInUrl = true;
|
|
||||
//});
|
|
||||
} |
|
||||
|
|
||||
private void ConfigureKestrelServer() |
|
||||
{ |
|
||||
Configure<KestrelServerOptions>(options => |
|
||||
{ |
|
||||
options.Limits.MaxRequestBodySize = null; |
|
||||
options.Limits.MaxRequestBufferSize = null; |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureBlobStoring(IConfiguration configuration) |
|
||||
{ |
|
||||
Configure<AbpBlobStoringOptions>(options => |
|
||||
{ |
|
||||
options.Containers.ConfigureAll((containerName, containerConfiguration) => |
|
||||
{ |
|
||||
containerConfiguration.UseFileSystem(fileSystem => |
|
||||
{ |
|
||||
fileSystem.BasePath = Path.Combine(Directory.GetCurrentDirectory(), "blobs"); |
|
||||
}); |
|
||||
|
|
||||
//containerConfiguration.UseMinio(minio =>
|
|
||||
//{
|
|
||||
// configuration.GetSection("Minio").Bind(minio);
|
|
||||
//});
|
|
||||
}); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureBackgroundTasks() |
|
||||
{ |
|
||||
Configure<AbpBackgroundTasksOptions>(options => |
|
||||
{ |
|
||||
options.NodeName = ApplicationName; |
|
||||
options.JobCleanEnabled = true; |
|
||||
options.JobFetchEnabled = true; |
|
||||
options.JobCheckEnabled = true; |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureTextTemplating(IConfiguration configuration) |
|
||||
{ |
|
||||
if (configuration.GetValue<bool>("TextTemplating:IsDynamicStoreEnabled")) |
|
||||
{ |
|
||||
Configure<AbpTextTemplatingCachingOptions>(options => |
|
||||
{ |
|
||||
options.IsDynamicTemplateDefinitionStoreEnabled = true; |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private void ConfigureFeatureManagement(IConfiguration configuration) |
|
||||
{ |
|
||||
if (configuration.GetValue<bool>("FeatureManagement:IsDynamicStoreEnabled")) |
|
||||
{ |
|
||||
Configure<FeatureManagementOptions>(options => |
|
||||
{ |
|
||||
options.IsDynamicFeatureStoreEnabled = true; |
|
||||
}); |
|
||||
} |
|
||||
Configure<FeatureManagementOptions>(options => |
|
||||
{ |
|
||||
options.ProviderPolicies[EditionFeatureValueProvider.ProviderName] = AbpSaasPermissions.Editions.ManageFeatures; |
|
||||
options.ProviderPolicies[TenantFeatureValueProvider.ProviderName] = AbpSaasPermissions.Tenants.ManageFeatures; |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureSettingManagement(IConfiguration configuration) |
|
||||
{ |
|
||||
if (configuration.GetValue<bool>("SettingManagement:IsDynamicStoreEnabled")) |
|
||||
{ |
|
||||
Configure<SettingManagementOptions>(options => |
|
||||
{ |
|
||||
options.IsDynamicSettingStoreEnabled = true; |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private void ConfigureWebhooksManagement(IConfiguration configuration) |
|
||||
{ |
|
||||
if (configuration.GetValue<bool>("WebhooksManagement:IsDynamicStoreEnabled")) |
|
||||
{ |
|
||||
Configure<WebhooksManagementOptions>(options => |
|
||||
{ |
|
||||
options.IsDynamicWebhookStoreEnabled = true; |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
/// <summary>
|
|
||||
/// 配置数据导出
|
|
||||
/// </summary>
|
|
||||
private void ConfigureExporter() |
|
||||
{ |
|
||||
Configure<AbpExporterMiniExcelOptions>(options => |
|
||||
{ |
|
||||
// options.MapExportSetting(typeof(BookDto), config =>
|
|
||||
// {
|
|
||||
// config.DynamicColumns = new[]
|
|
||||
// {
|
|
||||
// // 忽略某些字段
|
|
||||
// new DynamicExcelColumn(nameof(BookDto.AuthorId)){ Ignore = true },
|
|
||||
// new DynamicExcelColumn(nameof(BookDto.LastModificationTime)){ Ignore = true },
|
|
||||
// new DynamicExcelColumn(nameof(BookDto.LastModifierId)){ Ignore = true },
|
|
||||
// new DynamicExcelColumn(nameof(BookDto.CreationTime)){ Ignore = true },
|
|
||||
// new DynamicExcelColumn(nameof(BookDto.CreatorId)){ Ignore = true },
|
|
||||
// new DynamicExcelColumn(nameof(BookDto.Id)){ Ignore = true },
|
|
||||
// };
|
|
||||
// });
|
|
||||
}); |
|
||||
} |
|
||||
/// <summary>
|
|
||||
/// 配置数据权限
|
|
||||
/// </summary>
|
|
||||
private void ConfigureEntityDataProtected() |
|
||||
{ |
|
||||
// Configure<DataProtectionManagementOptions>(options =>
|
|
||||
// {
|
|
||||
// options.AddEntities(typeof(DemoResource),
|
|
||||
// new[]
|
|
||||
// {
|
|
||||
// typeof(Book),
|
|
||||
// });
|
|
||||
// });
|
|
||||
} |
|
||||
|
|
||||
private void ConfigurePermissionManagement(IConfiguration configuration) |
|
||||
{ |
|
||||
if (configuration.GetValue<bool>("PermissionManagement:IsDynamicStoreEnabled")) |
|
||||
{ |
|
||||
Configure<PermissionManagementOptions>(options => |
|
||||
{ |
|
||||
options.IsDynamicPermissionStoreEnabled = true; |
|
||||
}); |
|
||||
} |
|
||||
Configure<PermissionManagementOptions>(options => |
|
||||
{ |
|
||||
// Rename IdentityServer.Client.ManagePermissions
|
|
||||
// See https://github.com/abpframework/abp/blob/dev/modules/identityserver/src/Volo.Abp.PermissionManagement.Domain.IdentityServer/Volo/Abp/PermissionManagement/IdentityServer/AbpPermissionManagementDomainIdentityServerModule.cs
|
|
||||
options.ProviderPolicies[ClientPermissionValueProvider.ProviderName] = AbpOpenIddictPermissions.Applications.ManagePermissions; |
|
||||
|
|
||||
//if (configuration.GetValue<bool>("AuthServer:UseOpenIddict"))
|
|
||||
//{
|
|
||||
// options.ProviderPolicies[ClientPermissionValueProvider.ProviderName] = AbpOpenIddictPermissions.Applications.ManagePermissions;
|
|
||||
//}
|
|
||||
//else
|
|
||||
//{
|
|
||||
// options.ProviderPolicies[ClientPermissionValueProvider.ProviderName] = AbpIdentityServerPermissions.Clients.ManagePermissions;
|
|
||||
//}
|
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureNotificationManagement(IConfiguration configuration) |
|
||||
{ |
|
||||
if (configuration.GetValue<bool>("NotificationsManagement:IsDynamicStoreEnabled")) |
|
||||
{ |
|
||||
Configure<AbpNotificationsManagementOptions>(options => |
|
||||
{ |
|
||||
options.IsDynamicNotificationsStoreEnabled = true; |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private void ConfigureDistributedLock(IServiceCollection services, IConfiguration configuration) |
|
||||
{ |
|
||||
var distributedLockEnabled = configuration["DistributedLock:IsEnabled"]; |
|
||||
if (distributedLockEnabled.IsNullOrEmpty() || bool.Parse(distributedLockEnabled)) |
|
||||
{ |
|
||||
var redis = ConnectionMultiplexer.Connect(configuration["DistributedLock:Redis:Configuration"]); |
|
||||
services.AddSingleton<IDistributedLockProvider>(_ => new RedisDistributedSynchronizationProvider(redis.GetDatabase())); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private void ConfigureVirtualFileSystem() |
|
||||
{ |
|
||||
Configure<AbpVirtualFileSystemOptions>(options => |
|
||||
{ |
|
||||
options.FileSets.AddEmbedded<MicroServiceApplicationsSingleModule>("LY.MicroService.Applications.Single"); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureIdempotent() |
|
||||
{ |
|
||||
Configure<AbpIdempotentOptions>(options => |
|
||||
{ |
|
||||
options.IsEnabled = true; |
|
||||
options.DefaultTimeout = 0; |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureDbContext() |
|
||||
{ |
|
||||
Configure<AbpDbContextOptions>(options => |
|
||||
{ |
|
||||
// AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);//解决PostgreSql设置为utc时间后无法写入local时区的问题
|
|
||||
// options.UseNpgsql();
|
|
||||
|
|
||||
options.UseMySQL(); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureDataSeeder() |
|
||||
{ |
|
||||
Configure<CustomIdentityResourceDataSeederOptions>(options => |
|
||||
{ |
|
||||
options.Resources.Add(new CustomIdentityResources.AvatarUrl()); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureExceptionHandling() |
|
||||
{ |
|
||||
// 自定义需要处理的异常
|
|
||||
Configure<AbpExceptionHandlingOptions>(options => |
|
||||
{ |
|
||||
// 加入需要处理的异常类型
|
|
||||
options.Handlers.Add<Volo.Abp.Data.AbpDbConcurrencyException>(); |
|
||||
options.Handlers.Add<AbpInitializationException>(); |
|
||||
options.Handlers.Add<OutOfMemoryException>(); |
|
||||
options.Handlers.Add<System.Data.Common.DbException>(); |
|
||||
options.Handlers.Add<global::Microsoft.EntityFrameworkCore.DbUpdateException>(); |
|
||||
options.Handlers.Add<System.Data.DBConcurrencyException>(); |
|
||||
}); |
|
||||
// 自定义需要发送邮件通知的异常类型
|
|
||||
Configure<AbpEmailExceptionHandlingOptions>(options => |
|
||||
{ |
|
||||
// 是否发送堆栈信息
|
|
||||
options.SendStackTrace = true; |
|
||||
// 未指定异常接收者的默认接收邮件
|
|
||||
// 指定自己的邮件地址
|
|
||||
}); |
|
||||
|
|
||||
Configure<VoloAbpExceptionHandlingOptions>(options => |
|
||||
{ |
|
||||
options.SendStackTraceToClients = false; |
|
||||
options.SendExceptionsDetailsToClients = false; |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureJsonSerializer(IConfiguration configuration) |
|
||||
{ |
|
||||
// 统一时间日期格式
|
|
||||
Configure<AbpJsonOptions>(options => |
|
||||
{ |
|
||||
var jsonConfiguration = configuration.GetSection("Json"); |
|
||||
if (jsonConfiguration.Exists()) |
|
||||
{ |
|
||||
jsonConfiguration.Bind(options); |
|
||||
} |
|
||||
}); |
|
||||
// 中文序列化的编码问题
|
|
||||
Configure<AbpSystemTextJsonSerializerOptions>(options => |
|
||||
{ |
|
||||
options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureCaching(IConfiguration configuration) |
|
||||
{ |
|
||||
Configure<AbpDistributedCacheOptions>(options => |
|
||||
{ |
|
||||
configuration.GetSection("DistributedCache").Bind(options); |
|
||||
}); |
|
||||
|
|
||||
Configure<RedisCacheOptions>(options => |
|
||||
{ |
|
||||
var redisConfig = ConfigurationOptions.Parse(options.Configuration); |
|
||||
options.ConfigurationOptions = redisConfig; |
|
||||
options.InstanceName = configuration["Redis:InstanceName"]; |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureMultiTenancy(IConfiguration configuration) |
|
||||
{ |
|
||||
// 多租户
|
|
||||
Configure<AbpMultiTenancyOptions>(options => |
|
||||
{ |
|
||||
options.IsEnabled = true; |
|
||||
}); |
|
||||
|
|
||||
var tenantResolveCfg = configuration.GetSection("App:Domains"); |
|
||||
if (tenantResolveCfg.Exists()) |
|
||||
{ |
|
||||
Configure<AbpTenantResolveOptions>(options => |
|
||||
{ |
|
||||
var domains = tenantResolveCfg.Get<string[]>(); |
|
||||
foreach (var domain in domains) |
|
||||
{ |
|
||||
options.AddDomainTenantResolver(domain); |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private void ConfigureAuditing(IConfiguration configuration) |
|
||||
{ |
|
||||
Configure<AbpAuditingOptions>(options => |
|
||||
{ |
|
||||
options.ApplicationName = ApplicationName; |
|
||||
// 是否启用实体变更记录
|
|
||||
var allEntitiesSelectorIsEnabled = configuration["Auditing:AllEntitiesSelector"]; |
|
||||
if (allEntitiesSelectorIsEnabled.IsNullOrWhiteSpace() || |
|
||||
(bool.TryParse(allEntitiesSelectorIsEnabled, out var enabled) && enabled)) |
|
||||
{ |
|
||||
options.EntityHistorySelectors.AddAllEntities(); |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureSwagger(IServiceCollection services) |
|
||||
{ |
|
||||
// Swagger
|
|
||||
services.AddSwaggerGen( |
|
||||
options => |
|
||||
{ |
|
||||
options.SwaggerDoc("v1", new OpenApiInfo { Title = "App API", Version = "v1" }); |
|
||||
options.DocInclusionPredicate((docName, description) => true); |
|
||||
options.CustomSchemaIds(type => type.FullName); |
|
||||
options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme |
|
||||
{ |
|
||||
Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", |
|
||||
Name = "Authorization", |
|
||||
In = ParameterLocation.Header, |
|
||||
Scheme = "bearer", |
|
||||
Type = SecuritySchemeType.Http, |
|
||||
BearerFormat = "JWT" |
|
||||
}); |
|
||||
options.AddSecurityRequirement(new OpenApiSecurityRequirement |
|
||||
{ |
|
||||
{ |
|
||||
new OpenApiSecurityScheme |
|
||||
{ |
|
||||
Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } |
|
||||
}, |
|
||||
new string[] { } |
|
||||
} |
|
||||
}); |
|
||||
options.OperationFilter<TenantHeaderParamter>(); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureIdentity(IConfiguration configuration) |
|
||||
{ |
|
||||
// 增加配置文件定义,在新建租户时需要
|
|
||||
Configure<IdentityOptions>(options => |
|
||||
{ |
|
||||
var identityConfiguration = configuration.GetSection("Identity"); |
|
||||
if (identityConfiguration.Exists()) |
|
||||
{ |
|
||||
identityConfiguration.Bind(options); |
|
||||
} |
|
||||
}); |
|
||||
Configure<AbpClaimsPrincipalFactoryOptions>(options => |
|
||||
{ |
|
||||
options.IsDynamicClaimsEnabled = true; |
|
||||
}); |
|
||||
Configure<IdentitySessionCleanupOptions>(options => |
|
||||
{ |
|
||||
options.IsCleanupEnabled = true; |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureMvcUiTheme() |
|
||||
{ |
|
||||
Configure<AbpBundlingOptions>(options => |
|
||||
{ |
|
||||
//options.StyleBundles.Configure(
|
|
||||
// LeptonXLiteThemeBundles.Styles.Global,
|
|
||||
// bundle =>
|
|
||||
// {
|
|
||||
// bundle.AddFiles("/global-styles.css");
|
|
||||
// }
|
|
||||
//);
|
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureLocalization() |
|
||||
{ |
|
||||
Configure<AbpLocalizationOptions>(options => |
|
||||
{ |
|
||||
options.Languages.Add(new LanguageInfo("en", "en", "English")); |
|
||||
options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); |
|
||||
|
|
||||
options |
|
||||
.AddLanguagesMapOrUpdate( |
|
||||
"vue-admin-element-ui", |
|
||||
new NameValue("zh-Hans", "zh"), |
|
||||
new NameValue("en", "en")); |
|
||||
|
|
||||
// vben admin 语言映射
|
|
||||
options |
|
||||
.AddLanguagesMapOrUpdate( |
|
||||
"vben-admin-ui", |
|
||||
new NameValue("zh_CN", "zh-Hans")); |
|
||||
|
|
||||
options.Resources.Get<AbpSettingManagementResource>() |
|
||||
.AddBaseTypes( |
|
||||
typeof(IdentityResource), |
|
||||
typeof(AliyunResource), |
|
||||
typeof(TencentCloudResource), |
|
||||
typeof(WeChatResource), |
|
||||
typeof(PlatformResource), |
|
||||
typeof(AbpOpenIddictResource), |
|
||||
typeof(AbpIdentityServerResource)); |
|
||||
|
|
||||
options.UseAllPersistence(); |
|
||||
}); |
|
||||
|
|
||||
Configure<AbpLocalizationCultureMapOptions>(options => |
|
||||
{ |
|
||||
var zhHansCultureMapInfo = new CultureMapInfo |
|
||||
{ |
|
||||
TargetCulture = "zh-Hans", |
|
||||
SourceCultures = new string[] { "zh", "zh_CN", "zh-CN" } |
|
||||
}; |
|
||||
|
|
||||
options.CulturesMaps.Add(zhHansCultureMapInfo); |
|
||||
options.UiCulturesMaps.Add(zhHansCultureMapInfo); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureWrapper() |
|
||||
{ |
|
||||
Configure<AbpWrapperOptions>(options => |
|
||||
{ |
|
||||
options.IsEnabled = true; |
|
||||
// options.IsWrapUnauthorizedEnabled = true;
|
|
||||
options.IgnoreNamespaces.Add("Elsa"); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void PreConfigureWrapper() |
|
||||
{ |
|
||||
//PreConfigure<AbpDaprClientProxyOptions>(options =>
|
|
||||
//{
|
|
||||
// options.ProxyRequestActions.Add(
|
|
||||
// (appid, httprequestmessage) =>
|
|
||||
// {
|
|
||||
// httprequestmessage.Headers.TryAddWithoutValidation(AbpHttpWrapConsts.AbpDontWrapResult, "true");
|
|
||||
// });
|
|
||||
//});
|
|
||||
|
|
||||
PreConfigure<AbpHttpClientBuilderOptions>(options => |
|
||||
{ |
|
||||
options.ProxyClientActions.Add( |
|
||||
(_, _, client) => |
|
||||
{ |
|
||||
client.DefaultRequestHeaders.TryAddWithoutValidation(AbpHttpWrapConsts.AbpDontWrapResult, "true"); |
|
||||
}); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureAuditing() |
|
||||
{ |
|
||||
Configure<AbpAuditingOptions>(options => |
|
||||
{ |
|
||||
// options.IsEnabledForGetRequests = true;
|
|
||||
options.ApplicationName = ApplicationName; |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureUrls(IConfiguration configuration) |
|
||||
{ |
|
||||
Configure<AppUrlOptions>(options => |
|
||||
{ |
|
||||
var applicationConfiguration = configuration.GetSection("App:Urls:Applications"); |
|
||||
foreach (var appConfig in applicationConfiguration.GetChildren()) |
|
||||
{ |
|
||||
options.Applications[appConfig.Key].RootUrl = appConfig["RootUrl"]; |
|
||||
foreach (var urlsConfig in appConfig.GetSection("Urls").GetChildren()) |
|
||||
{ |
|
||||
options.Applications[appConfig.Key].Urls[urlsConfig.Key] = urlsConfig.Value; |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureSecurity(IServiceCollection services, IConfiguration configuration, bool isDevelopment = false) |
|
||||
{ |
|
||||
Configure<AbpAntiForgeryOptions>(options => |
|
||||
{ |
|
||||
options.AutoValidate = false; |
|
||||
}); |
|
||||
|
|
||||
services.Replace<CookieAuthenticationHandler, AbpCookieAuthenticationHandler>(ServiceLifetime.Scoped); |
|
||||
|
|
||||
services.AddAuthentication() |
|
||||
.AddAbpJwtBearer(options => |
|
||||
{ |
|
||||
configuration.GetSection("AuthServer").Bind(options); |
|
||||
|
|
||||
options.Events ??= new JwtBearerEvents(); |
|
||||
options.Events.OnMessageReceived = context => |
|
||||
{ |
|
||||
var accessToken = context.Request.Query["access_token"]; |
|
||||
var path = context.HttpContext.Request.Path; |
|
||||
if (!string.IsNullOrEmpty(accessToken) && |
|
||||
(path.StartsWithSegments("/api/files"))) |
|
||||
{ |
|
||||
context.Token = accessToken; |
|
||||
} |
|
||||
return Task.CompletedTask; |
|
||||
}; |
|
||||
}); |
|
||||
|
|
||||
if (!isDevelopment) |
|
||||
{ |
|
||||
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); |
|
||||
services |
|
||||
.AddDataProtection() |
|
||||
.SetApplicationName("LINGYUN.Abp.Application") |
|
||||
.PersistKeysToStackExchangeRedis(redis, "LINGYUN.Abp.Application:DataProtection:Protection-Keys"); |
|
||||
} |
|
||||
|
|
||||
services.AddSameSiteCookiePolicy(); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureCors(IServiceCollection services, IConfiguration configuration) |
|
||||
{ |
|
||||
services.AddCors(options => |
|
||||
{ |
|
||||
options.AddPolicy(DefaultCorsPolicyName, builder => |
|
||||
{ |
|
||||
builder |
|
||||
.WithOrigins( |
|
||||
configuration["App:CorsOrigins"] |
|
||||
.Split(",", StringSplitOptions.RemoveEmptyEntries) |
|
||||
.Select(o => o.RemovePostFix("/")) |
|
||||
.ToArray() |
|
||||
) |
|
||||
.WithAbpExposedHeaders() |
|
||||
.WithAbpWrapExposedHeaders() |
|
||||
.SetIsOriginAllowedToAllowWildcardSubdomains() |
|
||||
.AllowAnyHeader() |
|
||||
.AllowAnyMethod() |
|
||||
.AllowCredentials(); |
|
||||
}); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureWeChat() |
|
||||
{ |
|
||||
Configure<AbpWeChatMessageHandleOptions>(options => |
|
||||
{ |
|
||||
// 回复文本消息
|
|
||||
options.MapMessage< |
|
||||
LINGYUN.Abp.WeChat.Official.Messages.Models.TextMessage, |
|
||||
TextMessageReplyContributor>(); |
|
||||
// 处理关注事件
|
|
||||
options.MapEvent< |
|
||||
LINGYUN.Abp.WeChat.Official.Messages.Models.UserSubscribeEvent, |
|
||||
UserSubscribeEventContributor>(); |
|
||||
|
|
||||
options.MapMessage< |
|
||||
LINGYUN.Abp.WeChat.Work.Common.Messages.Models.TextMessage, |
|
||||
WeChat.Work.Messages.TextMessageReplyContributor>(); |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
@ -1,394 +0,0 @@ |
|||||
using LINGYUN.Abp.Account; |
|
||||
using LINGYUN.Abp.Account.Templates; |
|
||||
using LINGYUN.Abp.Aliyun.SettingManagement; |
|
||||
using LINGYUN.Abp.AspNetCore.HttpOverrides; |
|
||||
using LINGYUN.Abp.AspNetCore.Mvc.Idempotent.Wrapper; |
|
||||
using LINGYUN.Abp.AspNetCore.Mvc.Localization; |
|
||||
using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; |
|
||||
using LINGYUN.Abp.Auditing; |
|
||||
using LINGYUN.Abp.AuditLogging.EntityFrameworkCore; |
|
||||
using LINGYUN.Abp.Authentication.QQ; |
|
||||
using LINGYUN.Abp.Authentication.WeChat; |
|
||||
using LINGYUN.Abp.Authorization.OrganizationUnits; |
|
||||
using LINGYUN.Abp.BackgroundTasks; |
|
||||
using LINGYUN.Abp.BackgroundTasks.Activities; |
|
||||
using LINGYUN.Abp.BackgroundTasks.DistributedLocking; |
|
||||
using LINGYUN.Abp.BackgroundTasks.EventBus; |
|
||||
using LINGYUN.Abp.BackgroundTasks.ExceptionHandling; |
|
||||
using LINGYUN.Abp.BackgroundTasks.Jobs; |
|
||||
using LINGYUN.Abp.BackgroundTasks.Notifications; |
|
||||
using LINGYUN.Abp.BackgroundTasks.Quartz; |
|
||||
using LINGYUN.Abp.CachingManagement; |
|
||||
using LINGYUN.Abp.CachingManagement.StackExchangeRedis; |
|
||||
using LINGYUN.Abp.Dapr.Client; |
|
||||
using LINGYUN.Abp.Data.DbMigrator; |
|
||||
using LINGYUN.Abp.DataProtectionManagement; |
|
||||
using LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore; |
|
||||
// using LINGYUN.Abp.Demo;
|
|
||||
// using LINGYUN.Abp.Demo.EntityFrameworkCore;
|
|
||||
using LINGYUN.Abp.ExceptionHandling; |
|
||||
using LINGYUN.Abp.ExceptionHandling.Emailing; |
|
||||
using LINGYUN.Abp.Exporter.MiniExcel; |
|
||||
using LINGYUN.Abp.FeatureManagement; |
|
||||
using LINGYUN.Abp.FeatureManagement.HttpApi; |
|
||||
using LINGYUN.Abp.Features.LimitValidation; |
|
||||
using LINGYUN.Abp.Features.LimitValidation.Redis.Client; |
|
||||
using LINGYUN.Abp.Http.Client.Wrapper; |
|
||||
using LINGYUN.Abp.Identity; |
|
||||
using LINGYUN.Abp.Identity.AspNetCore.Session; |
|
||||
using LINGYUN.Abp.Identity.EntityFrameworkCore; |
|
||||
using LINGYUN.Abp.Identity.Notifications; |
|
||||
using LINGYUN.Abp.Identity.OrganizaztionUnits; |
|
||||
using LINGYUN.Abp.Identity.Session.AspNetCore; |
|
||||
using LINGYUN.Abp.Identity.WeChat; |
|
||||
using LINGYUN.Abp.IdGenerator; |
|
||||
using LINGYUN.Abp.IM.SignalR; |
|
||||
using LINGYUN.Abp.Localization.CultureMap; |
|
||||
using LINGYUN.Abp.Localization.Persistence; |
|
||||
using LINGYUN.Abp.LocalizationManagement; |
|
||||
using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; |
|
||||
using LINGYUN.Abp.MessageService; |
|
||||
using LINGYUN.Abp.MessageService.EntityFrameworkCore; |
|
||||
using LINGYUN.Abp.MultiTenancy.Editions; |
|
||||
using LINGYUN.Abp.Notifications; |
|
||||
using LINGYUN.Abp.Notifications.Common; |
|
||||
using LINGYUN.Abp.Notifications.Emailing; |
|
||||
using LINGYUN.Abp.Notifications.EntityFrameworkCore; |
|
||||
using LINGYUN.Abp.Notifications.SignalR; |
|
||||
using LINGYUN.Abp.Notifications.WeChat.MiniProgram; |
|
||||
using LINGYUN.Abp.OpenApi.Authorization; |
|
||||
using LINGYUN.Abp.OpenIddict; |
|
||||
using LINGYUN.Abp.OpenIddict.AspNetCore; |
|
||||
using LINGYUN.Abp.OpenIddict.AspNetCore.Session; |
|
||||
using LINGYUN.Abp.OpenIddict.Portal; |
|
||||
using LINGYUN.Abp.OpenIddict.Sms; |
|
||||
using LINGYUN.Abp.OpenIddict.WeChat; |
|
||||
using LINGYUN.Abp.OpenIddict.WeChat.Work; |
|
||||
using LINGYUN.Abp.OssManagement; |
|
||||
using LINGYUN.Abp.OssManagement.FileSystem; |
|
||||
// using LINGYUN.Abp.OssManagement.Imaging;
|
|
||||
using LINGYUN.Abp.OssManagement.SettingManagement; |
|
||||
using LINGYUN.Abp.PermissionManagement; |
|
||||
using LINGYUN.Abp.PermissionManagement.HttpApi; |
|
||||
using LINGYUN.Abp.PermissionManagement.OrganizationUnits; |
|
||||
using LINGYUN.Abp.Saas; |
|
||||
using LINGYUN.Abp.Saas.EntityFrameworkCore; |
|
||||
using LINGYUN.Abp.Serilog.Enrichers.Application; |
|
||||
using LINGYUN.Abp.Serilog.Enrichers.UniqueId; |
|
||||
using LINGYUN.Abp.SettingManagement; |
|
||||
using LINGYUN.Abp.Sms.Aliyun; |
|
||||
using LINGYUN.Abp.TaskManagement; |
|
||||
using LINGYUN.Abp.TaskManagement.EntityFrameworkCore; |
|
||||
using LINGYUN.Abp.Tencent.QQ; |
|
||||
using LINGYUN.Abp.Tencent.SettingManagement; |
|
||||
using LINGYUN.Abp.TextTemplating; |
|
||||
using LINGYUN.Abp.TextTemplating.EntityFrameworkCore; |
|
||||
using LINGYUN.Abp.UI.Navigation; |
|
||||
using LINGYUN.Abp.UI.Navigation.VueVbenAdmin; |
|
||||
using LINGYUN.Abp.Webhooks; |
|
||||
using LINGYUN.Abp.Webhooks.EventBus; |
|
||||
using LINGYUN.Abp.Webhooks.Identity; |
|
||||
using LINGYUN.Abp.Webhooks.Saas; |
|
||||
using LINGYUN.Abp.WebhooksManagement; |
|
||||
using LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore; |
|
||||
using LINGYUN.Abp.WeChat.MiniProgram; |
|
||||
using LINGYUN.Abp.WeChat.Official; |
|
||||
using LINGYUN.Abp.WeChat.Official.Handlers; |
|
||||
using LINGYUN.Abp.WeChat.SettingManagement; |
|
||||
using LINGYUN.Abp.WeChat.Work; |
|
||||
using LINGYUN.Abp.WeChat.Work.Handlers; |
|
||||
using LINGYUN.Platform; |
|
||||
using LINGYUN.Platform.EntityFrameworkCore; |
|
||||
using LINGYUN.Platform.HttpApi; |
|
||||
using LINGYUN.Platform.Settings.VueVbenAdmin; |
|
||||
using LINGYUN.Platform.Theme.VueVbenAdmin; |
|
||||
using Volo.Abp; |
|
||||
using Volo.Abp.Account.Web; |
|
||||
using Volo.Abp.AspNetCore.Authentication.JwtBearer; |
|
||||
using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy; |
|
||||
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; |
|
||||
using Volo.Abp.AspNetCore.Serilog; |
|
||||
using Volo.Abp.Autofac; |
|
||||
using Volo.Abp.Caching.StackExchangeRedis; |
|
||||
using Volo.Abp.Data; |
|
||||
using Volo.Abp.EntityFrameworkCore.PostgreSql; |
|
||||
using Volo.Abp.EventBus; |
|
||||
using Volo.Abp.FeatureManagement.EntityFrameworkCore; |
|
||||
using Volo.Abp.Imaging; |
|
||||
using Volo.Abp.Modularity; |
|
||||
using Volo.Abp.OpenIddict.EntityFrameworkCore; |
|
||||
using Volo.Abp.PermissionManagement.EntityFrameworkCore; |
|
||||
using Volo.Abp.PermissionManagement.Identity; |
|
||||
using Volo.Abp.PermissionManagement.OpenIddict; |
|
||||
using Volo.Abp.SettingManagement; |
|
||||
using Volo.Abp.SettingManagement.EntityFrameworkCore; |
|
||||
using Volo.Abp.Threading; |
|
||||
// using LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql;
|
|
||||
using Volo.Abp.EntityFrameworkCore.MySQL; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host; |
|
||||
|
|
||||
[DependsOn( |
|
||||
typeof(AbpAccountApplicationModule), |
|
||||
typeof(AbpAccountHttpApiModule), |
|
||||
typeof(AbpAccountWebOpenIddictModule), |
|
||||
typeof(AbpAuditingApplicationModule), |
|
||||
typeof(AbpAuditingHttpApiModule), |
|
||||
typeof(AbpAuditLoggingEntityFrameworkCoreModule), |
|
||||
typeof(AbpCachingManagementStackExchangeRedisModule), |
|
||||
typeof(AbpCachingManagementApplicationModule), |
|
||||
typeof(AbpCachingManagementHttpApiModule), |
|
||||
typeof(AbpIdentityAspNetCoreSessionModule), |
|
||||
typeof(AbpIdentitySessionAspNetCoreModule), |
|
||||
typeof(AbpIdentityNotificationsModule), |
|
||||
typeof(AbpIdentityDomainModule), |
|
||||
typeof(AbpIdentityApplicationModule), |
|
||||
typeof(AbpIdentityHttpApiModule), |
|
||||
typeof(AbpIdentityEntityFrameworkCoreModule), |
|
||||
typeof(AbpLocalizationManagementDomainModule), |
|
||||
typeof(AbpLocalizationManagementApplicationModule), |
|
||||
typeof(AbpLocalizationManagementHttpApiModule), |
|
||||
typeof(AbpLocalizationManagementEntityFrameworkCoreModule), |
|
||||
typeof(AbpSerilogEnrichersApplicationModule), |
|
||||
typeof(AbpSerilogEnrichersUniqueIdModule), |
|
||||
typeof(AbpMessageServiceDomainModule), |
|
||||
typeof(AbpMessageServiceApplicationModule), |
|
||||
typeof(AbpMessageServiceHttpApiModule), |
|
||||
typeof(AbpMessageServiceEntityFrameworkCoreModule), |
|
||||
typeof(AbpNotificationsDomainModule), |
|
||||
typeof(AbpNotificationsApplicationModule), |
|
||||
typeof(AbpNotificationsHttpApiModule), |
|
||||
typeof(AbpNotificationsEntityFrameworkCoreModule), |
|
||||
|
|
||||
//typeof(AbpIdentityServerSessionModule),
|
|
||||
//typeof(AbpIdentityServerApplicationModule),
|
|
||||
//typeof(AbpIdentityServerHttpApiModule),
|
|
||||
//typeof(AbpIdentityServerEntityFrameworkCoreModule),
|
|
||||
|
|
||||
typeof(AbpOpenIddictAspNetCoreModule), |
|
||||
typeof(AbpOpenIddictAspNetCoreSessionModule), |
|
||||
typeof(AbpOpenIddictApplicationModule), |
|
||||
typeof(AbpOpenIddictHttpApiModule), |
|
||||
typeof(AbpOpenIddictEntityFrameworkCoreModule), |
|
||||
typeof(AbpOpenIddictSmsModule), |
|
||||
typeof(AbpOpenIddictPortalModule), |
|
||||
typeof(AbpOpenIddictWeChatModule), |
|
||||
typeof(AbpOpenIddictWeChatWorkModule), |
|
||||
|
|
||||
//typeof(AbpOssManagementMinioModule), // 取消注释以使用Minio
|
|
||||
typeof(AbpOssManagementFileSystemModule), |
|
||||
// typeof(AbpOssManagementImagingModule),
|
|
||||
typeof(AbpOssManagementDomainModule), |
|
||||
typeof(AbpOssManagementApplicationModule), |
|
||||
typeof(AbpOssManagementHttpApiModule), |
|
||||
typeof(AbpOssManagementSettingManagementModule), |
|
||||
typeof(AbpImagingImageSharpModule), |
|
||||
|
|
||||
typeof(PlatformDomainModule), |
|
||||
typeof(PlatformApplicationModule), |
|
||||
typeof(PlatformHttpApiModule), |
|
||||
typeof(PlatformEntityFrameworkCoreModule), |
|
||||
typeof(PlatformSettingsVueVbenAdminModule), |
|
||||
typeof(PlatformThemeVueVbenAdminModule), |
|
||||
typeof(AbpUINavigationVueVbenAdminModule), |
|
||||
|
|
||||
typeof(AbpSaasDomainModule), |
|
||||
typeof(AbpSaasApplicationModule), |
|
||||
typeof(AbpSaasHttpApiModule), |
|
||||
typeof(AbpSaasEntityFrameworkCoreModule), |
|
||||
|
|
||||
typeof(TaskManagementDomainModule), |
|
||||
typeof(TaskManagementApplicationModule), |
|
||||
typeof(TaskManagementHttpApiModule), |
|
||||
typeof(TaskManagementEntityFrameworkCoreModule), |
|
||||
|
|
||||
typeof(AbpTextTemplatingDomainModule), |
|
||||
typeof(AbpTextTemplatingApplicationModule), |
|
||||
typeof(AbpTextTemplatingHttpApiModule), |
|
||||
typeof(AbpTextTemplatingEntityFrameworkCoreModule), |
|
||||
|
|
||||
typeof(AbpWebhooksModule), |
|
||||
typeof(AbpWebhooksEventBusModule), |
|
||||
typeof(AbpWebhooksIdentityModule), |
|
||||
typeof(AbpWebhooksSaasModule), |
|
||||
typeof(WebhooksManagementDomainModule), |
|
||||
typeof(WebhooksManagementApplicationModule), |
|
||||
typeof(WebhooksManagementHttpApiModule), |
|
||||
typeof(WebhooksManagementEntityFrameworkCoreModule), |
|
||||
|
|
||||
typeof(AbpFeatureManagementApplicationModule), |
|
||||
typeof(AbpFeatureManagementHttpApiModule), |
|
||||
typeof(AbpFeatureManagementEntityFrameworkCoreModule), |
|
||||
|
|
||||
typeof(AbpSettingManagementDomainModule), |
|
||||
typeof(AbpSettingManagementApplicationModule), |
|
||||
typeof(AbpSettingManagementHttpApiModule), |
|
||||
typeof(AbpSettingManagementEntityFrameworkCoreModule), |
|
||||
|
|
||||
typeof(AbpPermissionManagementApplicationModule), |
|
||||
typeof(AbpPermissionManagementHttpApiModule), |
|
||||
typeof(AbpPermissionManagementDomainIdentityModule), |
|
||||
typeof(AbpPermissionManagementDomainOpenIddictModule), |
|
||||
// typeof(AbpPermissionManagementDomainIdentityServerModule),
|
|
||||
typeof(AbpPermissionManagementEntityFrameworkCoreModule), |
|
||||
typeof(AbpPermissionManagementDomainOrganizationUnitsModule), // 组织机构权限管理
|
|
||||
|
|
||||
// typeof(AbpEntityFrameworkCorePostgreSqlModule),
|
|
||||
typeof(AbpEntityFrameworkCoreMySQLModule), |
|
||||
|
|
||||
typeof(AbpAliyunSmsModule), |
|
||||
typeof(AbpAliyunSettingManagementModule), |
|
||||
|
|
||||
typeof(AbpAuthenticationQQModule), |
|
||||
typeof(AbpAuthenticationWeChatModule), |
|
||||
typeof(AbpAuthorizationOrganizationUnitsModule), |
|
||||
typeof(AbpIdentityOrganizaztionUnitsModule), |
|
||||
|
|
||||
typeof(AbpBackgroundTasksModule), |
|
||||
typeof(AbpBackgroundTasksActivitiesModule), |
|
||||
typeof(AbpBackgroundTasksDistributedLockingModule), |
|
||||
typeof(AbpBackgroundTasksEventBusModule), |
|
||||
typeof(AbpBackgroundTasksExceptionHandlingModule), |
|
||||
typeof(AbpBackgroundTasksJobsModule), |
|
||||
typeof(AbpBackgroundTasksNotificationsModule), |
|
||||
typeof(AbpBackgroundTasksQuartzModule), |
|
||||
|
|
||||
typeof(AbpDataProtectionManagementApplicationModule), |
|
||||
typeof(AbpDataProtectionManagementHttpApiModule), |
|
||||
typeof(AbpDataProtectionManagementEntityFrameworkCoreModule), |
|
||||
|
|
||||
// typeof(AbpDemoApplicationModule),
|
|
||||
// typeof(AbpDemoHttpApiModule),
|
|
||||
// typeof(AbpDemoEntityFrameworkCoreModule),
|
|
||||
|
|
||||
typeof(AbpDaprClientModule), |
|
||||
typeof(AbpExceptionHandlingModule), |
|
||||
typeof(AbpEmailingExceptionHandlingModule), |
|
||||
typeof(AbpFeaturesLimitValidationModule), |
|
||||
typeof(AbpFeaturesValidationRedisClientModule), |
|
||||
typeof(AbpAspNetCoreMvcLocalizationModule), |
|
||||
|
|
||||
typeof(AbpLocalizationCultureMapModule), |
|
||||
typeof(AbpLocalizationPersistenceModule), |
|
||||
|
|
||||
typeof(AbpOpenApiAuthorizationModule), |
|
||||
|
|
||||
typeof(AbpIMSignalRModule), |
|
||||
|
|
||||
typeof(AbpNotificationsModule), |
|
||||
typeof(AbpNotificationsCommonModule), |
|
||||
typeof(AbpNotificationsSignalRModule), |
|
||||
typeof(AbpNotificationsEmailingModule), |
|
||||
typeof(AbpMultiTenancyEditionsModule), |
|
||||
|
|
||||
typeof(AbpTencentQQModule), |
|
||||
typeof(AbpTencentCloudSettingManagementModule), |
|
||||
|
|
||||
typeof(AbpIdentityWeChatModule), |
|
||||
typeof(AbpNotificationsWeChatMiniProgramModule), |
|
||||
typeof(AbpWeChatMiniProgramModule), |
|
||||
typeof(AbpWeChatOfficialModule), |
|
||||
typeof(AbpWeChatOfficialApplicationModule), |
|
||||
typeof(AbpWeChatOfficialHttpApiModule), |
|
||||
typeof(AbpWeChatWorkModule), |
|
||||
typeof(AbpWeChatWorkApplicationModule), |
|
||||
typeof(AbpWeChatWorkHttpApiModule), |
|
||||
typeof(AbpWeChatOfficialHandlersModule), |
|
||||
typeof(AbpWeChatWorkHandlersModule), |
|
||||
typeof(AbpWeChatSettingManagementModule), |
|
||||
|
|
||||
typeof(AbpDataDbMigratorModule), |
|
||||
typeof(AbpIdGeneratorModule), |
|
||||
typeof(AbpUINavigationModule), |
|
||||
typeof(AbpAccountTemplatesModule), |
|
||||
typeof(AbpAspNetCoreAuthenticationJwtBearerModule), |
|
||||
typeof(AbpCachingStackExchangeRedisModule), |
|
||||
// typeof(AbpElsaModule),
|
|
||||
// typeof(AbpElsaServerModule),
|
|
||||
// typeof(AbpElsaActivitiesModule),
|
|
||||
// typeof(AbpElsaEntityFrameworkCoreModule),
|
|
||||
// typeof(AbpElsaEntityFrameworkCorePostgreSqlModule),
|
|
||||
// typeof(AbpElsaModule),
|
|
||||
// typeof(AbpElsaServerModule),
|
|
||||
// typeof(AbpElsaActivitiesModule),
|
|
||||
// typeof(AbpElsaEntityFrameworkCoreModule),
|
|
||||
// typeof(AbpElsaEntityFrameworkCoreMySqlModule),
|
|
||||
|
|
||||
typeof(AbpExporterMiniExcelModule), |
|
||||
typeof(AbpAspNetCoreMvcUiMultiTenancyModule), |
|
||||
typeof(AbpAspNetCoreSerilogModule), |
|
||||
typeof(AbpHttpClientWrapperModule), |
|
||||
typeof(AbpAspNetCoreMvcWrapperModule), |
|
||||
typeof(AbpAspNetCoreMvcIdempotentWrapperModule), |
|
||||
typeof(AbpAspNetCoreHttpOverridesModule), |
|
||||
typeof(AbpAspNetCoreMvcUiBasicThemeModule), |
|
||||
typeof(AbpEventBusModule), |
|
||||
typeof(AbpAutofacModule) |
|
||||
)] |
|
||||
public partial class MicroServiceApplicationsSingleModule : AbpModule |
|
||||
{ |
|
||||
public override void PreConfigureServices(ServiceConfigurationContext context) |
|
||||
{ |
|
||||
var configuration = context.Services.GetConfiguration(); |
|
||||
var hostingEnvironment = context.Services.GetHostingEnvironment(); |
|
||||
|
|
||||
PreConfigureWrapper(); |
|
||||
PreConfigureFeature(); |
|
||||
PreConfigureIdentity(); |
|
||||
PreConfigureApp(configuration); |
|
||||
PreConfigureQuartz(configuration); |
|
||||
PreConfigureAuthServer(configuration); |
|
||||
PreConfigureElsa(context.Services, configuration); |
|
||||
PreConfigureCertificate(configuration, hostingEnvironment); |
|
||||
} |
|
||||
|
|
||||
public override void ConfigureServices(ServiceConfigurationContext context) |
|
||||
{ |
|
||||
var hostingEnvironment = context.Services.GetHostingEnvironment(); |
|
||||
var configuration = context.Services.GetConfiguration(); |
|
||||
|
|
||||
ConfigureWeChat(); |
|
||||
ConfigureWrapper(); |
|
||||
ConfigureExporter(); |
|
||||
ConfigureAuditing(); |
|
||||
ConfigureDbContext(); |
|
||||
ConfigureIdempotent(); |
|
||||
ConfigureMvcUiTheme(); |
|
||||
ConfigureDataSeeder(); |
|
||||
ConfigureLocalization(); |
|
||||
ConfigureKestrelServer(); |
|
||||
ConfigureBackgroundTasks(); |
|
||||
ConfigureExceptionHandling(); |
|
||||
ConfigureVirtualFileSystem(); |
|
||||
ConfigureEntityDataProtected(); |
|
||||
ConfigureUrls(configuration); |
|
||||
ConfigureCaching(configuration); |
|
||||
ConfigureAuditing(configuration); |
|
||||
ConfigureIdentity(configuration); |
|
||||
ConfigureAuthServer(configuration); |
|
||||
ConfigureSwagger(context.Services); |
|
||||
ConfigureEndpoints(context.Services); |
|
||||
ConfigureBlobStoring(configuration); |
|
||||
ConfigureMultiTenancy(configuration); |
|
||||
ConfigureJsonSerializer(configuration); |
|
||||
ConfigureTextTemplating(configuration); |
|
||||
ConfigureFeatureManagement(configuration); |
|
||||
ConfigureSettingManagement(configuration); |
|
||||
ConfigureWebhooksManagement(configuration); |
|
||||
ConfigurePermissionManagement(configuration); |
|
||||
ConfigureNotificationManagement(configuration); |
|
||||
ConfigureCors(context.Services, configuration); |
|
||||
ConfigureDistributedLock(context.Services, configuration); |
|
||||
ConfigureSecurity(context.Services, configuration, hostingEnvironment.IsDevelopment()); |
|
||||
} |
|
||||
|
|
||||
public override void OnApplicationInitialization(ApplicationInitializationContext context) |
|
||||
{ |
|
||||
AsyncHelper.RunSync(async () => await OnApplicationInitializationAsync(context)); |
|
||||
} |
|
||||
|
|
||||
public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context) |
|
||||
{ |
|
||||
await context.ServiceProvider.GetRequiredService<IDataSeeder>().SeedAsync(); ; |
|
||||
} |
|
||||
} |
|
||||
@ -1,67 +0,0 @@ |
|||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.Microsoft.Extensions.DependencyInjection |
|
||||
{ |
|
||||
public static class SameSiteCookiesServiceCollectionExtensions |
|
||||
{ |
|
||||
public static IServiceCollection AddSameSiteCookiePolicy(this IServiceCollection services) |
|
||||
{ |
|
||||
services.Configure<CookiePolicyOptions>(options => |
|
||||
{ |
|
||||
options.MinimumSameSitePolicy = SameSiteMode.Unspecified; |
|
||||
options.OnAppendCookie = cookieContext => |
|
||||
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions); |
|
||||
options.OnDeleteCookie = cookieContext => |
|
||||
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions); |
|
||||
}); |
|
||||
|
|
||||
return services; |
|
||||
} |
|
||||
|
|
||||
private static void CheckSameSite(HttpContext httpContext, CookieOptions options) |
|
||||
{ |
|
||||
if (options.SameSite == SameSiteMode.None) |
|
||||
{ |
|
||||
var userAgent = httpContext.Request.Headers["User-Agent"].ToString(); |
|
||||
if (!httpContext.Request.IsHttps || DisallowsSameSiteNone(userAgent)) |
|
||||
{ |
|
||||
// For .NET Core < 3.1 set SameSite = (SameSiteMode)(-1)
|
|
||||
options.SameSite = SameSiteMode.Unspecified; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private static bool DisallowsSameSiteNone(string userAgent) |
|
||||
{ |
|
||||
// Cover all iOS based browsers here. This includes:
|
|
||||
// - Safari on iOS 12 for iPhone, iPod Touch, iPad
|
|
||||
// - WkWebview on iOS 12 for iPhone, iPod Touch, iPad
|
|
||||
// - Chrome on iOS 12 for iPhone, iPod Touch, iPad
|
|
||||
// All of which are broken by SameSite=None, because they use the iOS networking stack
|
|
||||
if (userAgent.Contains("CPU iPhone OS 12") || userAgent.Contains("iPad; CPU OS 12")) |
|
||||
{ |
|
||||
return true; |
|
||||
} |
|
||||
|
|
||||
// Cover Mac OS X based browsers that use the Mac OS networking stack. This includes:
|
|
||||
// - Safari on Mac OS X.
|
|
||||
// This does not include:
|
|
||||
// - Chrome on Mac OS X
|
|
||||
// Because they do not use the Mac OS networking stack.
|
|
||||
if (userAgent.Contains("Macintosh; Intel Mac OS X 10_14") && |
|
||||
userAgent.Contains("Version/") && userAgent.Contains("Safari")) |
|
||||
{ |
|
||||
return true; |
|
||||
} |
|
||||
|
|
||||
// Cover Chrome 50-69, because some versions are broken by SameSite=None,
|
|
||||
// and none in this range require it.
|
|
||||
// Note: this covers some pre-Chromium Edge versions,
|
|
||||
// but pre-Chromium Edge does not require SameSite=None.
|
|
||||
if (userAgent.Contains("Chrome/5") || userAgent.Contains("Chrome/6")) |
|
||||
{ |
|
||||
return true; |
|
||||
} |
|
||||
|
|
||||
return false; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,10 +0,0 @@ |
|||||
using Volo.Abp.MultiTenancy; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.MultiTenancy; |
|
||||
|
|
||||
public interface ITenantConfigurationCache |
|
||||
{ |
|
||||
Task RefreshAsync(); |
|
||||
|
|
||||
Task<List<TenantConfiguration>> GetTenantsAsync(); |
|
||||
} |
|
||||
@ -1,59 +0,0 @@ |
|||||
using LINGYUN.Abp.Saas.Tenants; |
|
||||
using Volo.Abp.Caching; |
|
||||
using Volo.Abp.DependencyInjection; |
|
||||
using Volo.Abp.MultiTenancy; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.MultiTenancy; |
|
||||
|
|
||||
public class TenantConfigurationCache : ITenantConfigurationCache, ITransientDependency |
|
||||
{ |
|
||||
protected ITenantRepository TenantRepository { get; } |
|
||||
protected IDistributedCache<TenantConfigurationCacheItem> TenantCache { get; } |
|
||||
|
|
||||
public TenantConfigurationCache( |
|
||||
ITenantRepository tenantRepository, |
|
||||
IDistributedCache<TenantConfigurationCacheItem> tenantCache) |
|
||||
{ |
|
||||
TenantRepository = tenantRepository; |
|
||||
TenantCache = tenantCache; |
|
||||
} |
|
||||
|
|
||||
public async virtual Task RefreshAsync() |
|
||||
{ |
|
||||
var cacheKey = GetCacheKey(); |
|
||||
|
|
||||
await TenantCache.RemoveAsync(cacheKey); |
|
||||
} |
|
||||
|
|
||||
public async virtual Task<List<TenantConfiguration>> GetTenantsAsync() |
|
||||
{ |
|
||||
return (await GetForCacheItemAsync()).Tenants; |
|
||||
} |
|
||||
|
|
||||
protected async virtual Task<TenantConfigurationCacheItem> GetForCacheItemAsync() |
|
||||
{ |
|
||||
var cacheKey = GetCacheKey(); |
|
||||
var cacheItem = await TenantCache.GetAsync(cacheKey); |
|
||||
if (cacheItem == null) |
|
||||
{ |
|
||||
var allActiveTenants = await TenantRepository.GetListAsync(); |
|
||||
|
|
||||
cacheItem = new TenantConfigurationCacheItem( |
|
||||
allActiveTenants |
|
||||
.Where(t => t.IsActive) |
|
||||
.Select(t => new TenantConfiguration(t.Id, t.Name) |
|
||||
{ |
|
||||
IsActive = t.IsActive, |
|
||||
}).ToList()); |
|
||||
|
|
||||
await TenantCache.SetAsync(cacheKey, cacheItem); |
|
||||
} |
|
||||
|
|
||||
return cacheItem; |
|
||||
} |
|
||||
|
|
||||
protected virtual string GetCacheKey() |
|
||||
{ |
|
||||
return "_Abp_Tenant_Configuration"; |
|
||||
} |
|
||||
} |
|
||||
@ -1,19 +0,0 @@ |
|||||
using Volo.Abp.MultiTenancy; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.MultiTenancy; |
|
||||
|
|
||||
[IgnoreMultiTenancy] |
|
||||
public class TenantConfigurationCacheItem |
|
||||
{ |
|
||||
public List<TenantConfiguration> Tenants { get; set; } |
|
||||
|
|
||||
public TenantConfigurationCacheItem() |
|
||||
{ |
|
||||
Tenants = new List<TenantConfiguration>(); |
|
||||
} |
|
||||
|
|
||||
public TenantConfigurationCacheItem(List<TenantConfiguration> tenants) |
|
||||
{ |
|
||||
Tenants = tenants; |
|
||||
} |
|
||||
} |
|
||||
@ -1,276 +0,0 @@ |
|||||
<Project Sdk="Microsoft.NET.Sdk.Web"> |
|
||||
<PropertyGroup> |
|
||||
<TargetFramework>net8.0</TargetFramework> |
|
||||
<ImplicitUsings>enable</ImplicitUsings> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<PackageReference Include="DistributedLock.Redis" /> |
|
||||
<PackageReference Include="Elsa.Activities.Email" /> |
|
||||
<PackageReference Include="Elsa.Activities.Http" /> |
|
||||
<PackageReference Include="Elsa.Activities.UserTask" /> |
|
||||
<PackageReference Include="Elsa.Activities.Temporal.Quartz" /> |
|
||||
<!--<PackageReference Include="Elsa.Designer.Components.Web" />--> |
|
||||
<PackageReference Include="Elsa.Webhooks.Api" /> |
|
||||
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" /> |
|
||||
<PackageReference Include="OpenIddict.Validation.DataProtection" /> |
|
||||
<PackageReference Include="OpenIddict.Server.DataProtection" /> |
|
||||
<PackageReference Include="Serilog.AspNetCore" /> |
|
||||
<PackageReference Include="Serilog.Enrichers.Environment" /> |
|
||||
<PackageReference Include="Serilog.Enrichers.Assembly" /> |
|
||||
<PackageReference Include="Serilog.Enrichers.Process" /> |
|
||||
<PackageReference Include="Serilog.Enrichers.Thread" /> |
|
||||
<PackageReference Include="Serilog.Settings.Configuration" /> |
|
||||
<PackageReference Include="Serilog.Sinks.Elasticsearch" /> |
|
||||
<PackageReference Include="Serilog.Sinks.File" /> |
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" /> |
|
||||
<PackageReference Include="Quartz.Serialization.Json" /> |
|
||||
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" /> |
|
||||
<!--<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" />--> |
|
||||
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" /> |
|
||||
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy" /> |
|
||||
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic" /> |
|
||||
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" /> |
|
||||
<PackageReference Include="Volo.Abp.Autofac" /> |
|
||||
<PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" /> |
|
||||
<PackageReference Include="Volo.Abp.EntityFrameworkCore.MySQL" /> |
|
||||
<PackageReference Include="Volo.Abp.EntityFrameworkCore.PostgreSql" /> |
|
||||
<PackageReference Include="Volo.Abp.FeatureManagement.Application" /> |
|
||||
<PackageReference Include="Volo.Abp.FeatureManagement.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="Volo.Abp.FeatureManagement.HttpApi" /> |
|
||||
<PackageReference Include="Volo.Abp.PermissionManagement.Application" /> |
|
||||
<PackageReference Include="Volo.Abp.PermissionManagement.Domain.Identity" /> |
|
||||
<PackageReference Include="Volo.Abp.PermissionManagement.Domain.IdentityServer" /> |
|
||||
<PackageReference Include="Volo.Abp.PermissionManagement.Domain.OpenIddict" /> |
|
||||
<PackageReference Include="Volo.Abp.PermissionManagement.HttpApi" /> |
|
||||
<PackageReference Include="Volo.Abp.Identity.AspNetCore" /> |
|
||||
<PackageReference Include="Volo.Abp.Imaging.ImageSharp" /> |
|
||||
<!--<PackageReference Include="Volo.Abp.IdentityServer.EntityFrameworkCore" />--> |
|
||||
<PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="Volo.Abp.OpenIddict.EntityFrameworkCore" /> |
|
||||
</ItemGroup> |
|
||||
<ItemGroup> |
|
||||
<PackageReference Include="LINGYUN.Abp.AuditLogging.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.AuditLogging" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Authentication.QQ" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Authentication.WeChat" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Authorization.OrganizationUnits" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Aliyun.SettingManagement" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Aliyun" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Tencent.QQ" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Tencent.SettingManagement" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Tencent" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.AspNetCore.HttpOverrides" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Data.DbMigrator" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.ExceptionHandling.Emailing" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.ExceptionHandling" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Features.LimitValidation.Redis.Client" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Features.LimitValidation.Redis" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Features.LimitValidation" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Http.Client.Wrapper" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.IdGenerator" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.RealTime" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Wrapper" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Dynamic.Queryable.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Dynamic.Queryable.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Dynamic.Queryable.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Linq.Dynamic.Queryable" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Exporter.MiniExcel" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.FeatureManagement.Client" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.AspNetCore.Mvc.Localization" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Localization.CultureMap" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Localization.Persistence" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Logging.Serilog.Elasticsearch" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Logging" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Serilog.Enrichers.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Serilog.Enrichers.UniqueId" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Sms.Aliyun" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.AspNetCore.Mvc.Idempotent.Wrapper" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.AspNetCore.Mvc.Wrapper" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.UI.Navigation" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OpenApi.Authorization" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OpenApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.SettingManagement.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.MultiTenancy.Editions" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Identity.WeChat" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WeChat.MiniProgram" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WeChat.Official.Handlers" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WeChat.Official" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WeChat.Official.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WeChat.Official.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WeChat.SettingManagement" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WeChat.Work.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WeChat.Work.Handlers" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WeChat.Work.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WeChat.Work" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WeChat" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<PackageReference Include="LINGYUN.Abp.Account.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Account.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Account.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Account.Templates" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Auditing.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Auditing.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Auditing.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.CachingManagement.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.CachingManagement.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.CachingManagement.Domain" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.CachingManagement.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.CachingManagement.StackExchangeRedis" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.DataProtectionManagement.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.DataProtectionManagement.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Elsa.Activities.BlobStoring" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Elsa.Activities.Emailing" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Elsa.Activities.IM" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Elsa.Activities.Notifications" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Elsa.Activities.Sms" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Elsa.Activities.Webhooks" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Elsa.Activities" /> |
|
||||
<!-- <PackageReference Include="LINGYUN.Abp.Elsa.EntityFrameworkCore.PostgreSql" />--> |
|
||||
<PackageReference Include="LINGYUN.Abp.Elsa.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Elsa.Server" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Elsa" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.FeatureManagement.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.FeatureManagement.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.IdentityServer.Session" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Identity.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Identity.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Identity.AspNetCore.Session" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Identity.Domain.Shared" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Identity.Domain" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Identity.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Identity.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Identity.Notifications" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Identity.OrganizaztionUnits" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.IdentityServer.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.IdentityServer.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.IdentityServer.Domain" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.IdentityServer.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.IdentityServer.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.IdentityServer.LinkUser" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.IdentityServer.Portal" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.IdentityServer.SmsValidator" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.IdentityServer.WeChat.Work" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Identity.Session.AspNetCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.LocalizationManagement.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.LocalizationManagement.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.LocalizationManagement.Domain.Shared" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.LocalizationManagement.Domain" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.LocalizationManagement.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OpenIddict.AspNetCore.Session" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OpenIddict.AspNetCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.IM.SignalR" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.IM" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.MessageService.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.MessageService.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.MessageService.Domain.Shared" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.MessageService.Domain" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.MessageService.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.MessageService.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.ExceptionHandling.Notifications" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Notifications.Common" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Notifications.Core" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Notifications.Emailing" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Notifications.SignalR" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Notifications.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Notifications.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Notifications.Domain.Shared" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Notifications.Domain" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Notifications.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Notifications.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Notifications.WeChat.MiniProgram" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Notifications.WeChat.Work" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OpenIddict.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OpenIddict.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OpenIddict.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OpenIddict.LinkUser" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OpenIddict.Sms" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OpenIddict.Portal" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OpenIddict.WeChat" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OpenIddict.WeChat.Work" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OssManagement.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OssManagement.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OssManagement.Domain.Shared" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OssManagement.Domain" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OssManagement.FileSystem" /> |
|
||||
<!-- <PackageReference Include="LINGYUN.Abp.OssManagement.Imaging" />--> |
|
||||
<!-- <PackageReference Include="LINGYUN.Abp.OssManagement.Minio" />--> |
|
||||
<PackageReference Include="LINGYUN.Abp.OssManagement.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.OssManagement.SettingManagement" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.PermissionManagement.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.PermissionManagement.Domain.OrganizationUnits" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.PermissionManagement.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.UI.Navigation.VueVbenAdmin" /> |
|
||||
<PackageReference Include="LINGYUN.Platform.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Platform.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Platform.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Platform.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Platform.Domain.Shared" /> |
|
||||
<PackageReference Include="LINGYUN.Platform.Domain" /> |
|
||||
<PackageReference Include="LINGYUN.Platform.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Platform.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Platform.Settings.VueVbenAdmin" /> |
|
||||
<PackageReference Include="LINGYUN.Platform.Theme.VueVbenAdmin" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Saas.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Saas.Domain.Shared" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Saas.Domain" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Saas.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Saas.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Saas.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.SettingManagement.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.SettingManagement.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.BackgroundTasks.Abstractions" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.BackgroundTasks.Activities" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.BackgroundTasks.DistributedLocking" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.BackgroundTasks.EventBus" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.BackgroundTasks.ExceptionHandling" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.BackgroundTasks.Jobs" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.BackgroundTasks.Notifications" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.BackgroundTasks.Quartz" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.BackgroundTasks" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.TaskManagement.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.TaskManagement.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.TaskManagement.Domain.Shared" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.TaskManagement.Domain" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.TaskManagement.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.TaskManagement.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.TextTemplating.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.TextTemplating.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.TextTemplating.Domain.Shared" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.TextTemplating.Domain" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.TextTemplating.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.TextTemplating.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Webhooks.Core" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Webhooks.EventBus" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Webhooks.Identity" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Webhooks.Saas" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WebhooksManagement.Application.Contracts" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WebhooksManagement.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WebhooksManagement.Domain.Shared" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WebhooksManagement.Domain" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.WebhooksManagement.HttpApi" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Webhooks" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<ProjectReference Include="..\..\src\PackageName.CompanyName.ProjectName.Application\PackageName.CompanyName.ProjectName.Application.csproj" /> |
|
||||
<ProjectReference Include="..\..\src\PackageName.CompanyName.ProjectName.EntityFrameworkCore\PackageName.CompanyName.ProjectName.EntityFrameworkCore.csproj" /> |
|
||||
<ProjectReference Include="..\..\src\PackageName.CompanyName.ProjectName.HttpApi\PackageName.CompanyName.ProjectName.HttpApi.csproj" /> |
|
||||
<ProjectReference Include="..\..\src\PackageName.CompanyName.ProjectName.SettingManagement\PackageName.CompanyName.ProjectName.SettingManagement.csproj" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<Folder Include="blobs\host\public\" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<None Remove="blobs\host\public\iShot_2024-12-04_11.51.43.png" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
</Project> |
|
||||
@ -1,103 +0,0 @@ |
|||||
@using Volo.Abp.Account.Localization |
|
||||
@using Volo.Abp.Users |
|
||||
@using Microsoft.AspNetCore.Mvc.Localization |
|
||||
@using Microsoft.Extensions.Localization |
|
||||
@using Volo.Abp.Account.Web.Pages.Account.Components.ProfileManagementGroup.PersonalInfo |
|
||||
@using Volo.Abp.AspNetCore.Mvc.UI.Theming |
|
||||
@using Volo.Abp.Data |
|
||||
@using Volo.Abp.Identity.Settings |
|
||||
@using Volo.Abp.Localization |
|
||||
@using Volo.Abp.Settings |
|
||||
@using Volo.Abp.ObjectExtending |
|
||||
@inject IHtmlLocalizer<AccountResource> L |
|
||||
@inject ICurrentUser CurrentUser |
|
||||
@inject ISettingProvider SettingManager |
|
||||
@inject IThemeManager ThemeManager |
|
||||
@inject IStringLocalizerFactory StringLocalizerFactory |
|
||||
@model Volo.Abp.Account.Web.Pages.Account.Components.ProfileManagementGroup.PersonalInfo.AccountProfilePersonalInfoManagementGroupViewComponent.PersonalInfoModel |
|
||||
@{ |
|
||||
var isUserNameUpdateEnabled = string.Equals(await SettingManager.GetOrNullAsync(IdentitySettingNames.User.IsUserNameUpdateEnabled), "true", |
|
||||
StringComparison.OrdinalIgnoreCase); |
|
||||
|
|
||||
var isEmailUpdateEnabled = string.Equals(await SettingManager.GetOrNullAsync(IdentitySettingNames.User.IsEmailUpdateEnabled), "true", |
|
||||
StringComparison.OrdinalIgnoreCase); |
|
||||
} |
|
||||
|
|
||||
<h4>@L["PersonalSettings"]</h4><hr/> |
|
||||
<form method="post" id="PersonalSettingsForm"> |
|
||||
|
|
||||
<input asp-for="ConcurrencyStamp" /> |
|
||||
|
|
||||
<abp-input asp-for="UserName" readonly="!isUserNameUpdateEnabled"/> |
|
||||
|
|
||||
<abp-row> |
|
||||
<abp-column size-md="_6"> |
|
||||
<abp-input asp-for="Name"/> |
|
||||
</abp-column> |
|
||||
<abp-column size-md="_6"> |
|
||||
<abp-input asp-for="Surname"/> |
|
||||
</abp-column> |
|
||||
</abp-row> |
|
||||
|
|
||||
<abp-row> |
|
||||
<abp-column size-md="_9"> |
|
||||
<abp-input asp-for="Email" readonly="!isEmailUpdateEnabled"/> |
|
||||
</abp-column> |
|
||||
<abp-column size-md="_3"> |
|
||||
@if (CurrentUser.EmailVerified) |
|
||||
{ |
|
||||
<abp-button button-type="Success" text="@L["Confirmed"].Value"/> |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
@*<abp-button href="/Account/SendEmailConfirm" button-type="Link" text="@L["Validation"].Value" />*@ |
|
||||
<a href="/Account/SendEmailConfirm">@L["Validation"].Value</a> |
|
||||
} |
|
||||
</abp-column> |
|
||||
</abp-row> |
|
||||
|
|
||||
<abp-input asp-for="PhoneNumber"/> |
|
||||
|
|
||||
@foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties<AccountProfilePersonalInfoManagementGroupViewComponent.PersonalInfoModel>()) |
|
||||
{ |
|
||||
var isAllowed = propertyInfo.Configuration.GetOrDefault(IdentityModuleExtensionConsts.ConfigurationNames.AllowUserToEdit); |
|
||||
|
|
||||
if (isAllowed == null || !isAllowed.Equals(true)) |
|
||||
{ |
|
||||
continue; |
|
||||
} |
|
||||
|
|
||||
if (!propertyInfo.Name.EndsWith("_Text")) |
|
||||
{ |
|
||||
if (propertyInfo.Type.IsEnum || !propertyInfo.Lookup.Url.IsNullOrEmpty()) |
|
||||
{ |
|
||||
if (propertyInfo.Type.IsEnum) |
|
||||
{ |
|
||||
Model.ExtraProperties.ToEnum(propertyInfo.Name, propertyInfo.Type); |
|
||||
} |
|
||||
<abp-select asp-for="ExtraProperties[propertyInfo.Name]" |
|
||||
name="ExtraProperties.@propertyInfo.Name" |
|
||||
label="@propertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)" |
|
||||
autocomplete-api-url="@propertyInfo.Lookup.Url" |
|
||||
autocomplete-selected-item-name="@Model.GetProperty(propertyInfo.Name + "_Text")" |
|
||||
autocomplete-selected-item-value="@Model.GetProperty(propertyInfo.Name)" |
|
||||
autocomplete-filter-param-name="@propertyInfo.Lookup.FilterParamName" |
|
||||
autocomplete-items-property-name="@propertyInfo.Lookup.ResultListPropertyName" |
|
||||
autocomplete-display-property-name="@propertyInfo.Lookup.DisplayPropertyName" |
|
||||
autocomplete-value-property-name="@propertyInfo.Lookup.ValuePropertyName"> |
|
||||
</abp-select> |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
<abp-input type="@propertyInfo.GetInputType()" |
|
||||
asp-for="ExtraProperties[propertyInfo.Name]" |
|
||||
name="ExtraProperties.@propertyInfo.Name" |
|
||||
label="@propertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)" |
|
||||
asp-format="@propertyInfo.GetInputFormatOrNull()" |
|
||||
value="@propertyInfo.GetInputValueOrNull(Model.GetProperty(propertyInfo.Name))" /> |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
<abp-button type="submit" button-type="Primary" text="@L["Submit"].Value"/> |
|
||||
</form> |
|
||||
@ -1,28 +0,0 @@ |
|||||
(function ($) { |
|
||||
$(function () { |
|
||||
var l = abp.localization.getResource("AbpAccount"); |
|
||||
|
|
||||
$('#PersonalSettingsForm').submit(function (e) { |
|
||||
e.preventDefault(); |
|
||||
|
|
||||
if (!$('#PersonalSettingsForm').valid()) { |
|
||||
return false; |
|
||||
} |
|
||||
|
|
||||
var input = $('#PersonalSettingsForm').serializeFormToObject(); |
|
||||
|
|
||||
volo.abp.account.profile.update(input).then(function (result) { |
|
||||
abp.notify.success(l('PersonalSettingsSaved')); |
|
||||
updateConcurrencyStamp(); |
|
||||
}); |
|
||||
}); |
|
||||
}); |
|
||||
|
|
||||
abp.event.on('passwordChanged', updateConcurrencyStamp); |
|
||||
|
|
||||
function updateConcurrencyStamp(){ |
|
||||
volo.abp.account.profile.get().then(function(profile){ |
|
||||
$("#ConcurrencyStamp").val(profile.concurrencyStamp); |
|
||||
}); |
|
||||
} |
|
||||
})(jQuery); |
|
||||
@ -1,17 +0,0 @@ |
|||||
@page |
|
||||
@inject IHtmlLocalizer<AccountResource> L |
|
||||
@using Microsoft.AspNetCore.Mvc.Localization |
|
||||
@using Volo.Abp.Account.Localization |
|
||||
@model PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account.EmailConfirmModel |
|
||||
@inject Volo.Abp.AspNetCore.Mvc.UI.Layout.IPageLayout PageLayout |
|
||||
<div class="card mt-3 shadow-sm rounded"> |
|
||||
<div class="card-body p-5"> |
|
||||
<h4>@L["EmailConfirm"]</h4> |
|
||||
<form method="post"> |
|
||||
<abp-input asp-for="UserId"/> |
|
||||
<abp-input asp-for="ConfirmToken"/> |
|
||||
<a abp-button="Secondary" asp-page="./Login">@L["Cancel"]</a> |
|
||||
<abp-button type="submit" button-type="Primary" text="@L["Submit"].Value"/> |
|
||||
</form> |
|
||||
</div> |
|
||||
</div> |
|
||||
@ -1,72 +0,0 @@ |
|||||
using LINGYUN.Abp.Account; |
|
||||
using Microsoft.AspNetCore.Mvc; |
|
||||
using System.ComponentModel.DataAnnotations; |
|
||||
using Volo.Abp.Account.Localization; |
|
||||
using Volo.Abp.Account.Web.Pages.Account; |
|
||||
using Volo.Abp.Identity; |
|
||||
using Volo.Abp.Validation; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account |
|
||||
{ |
|
||||
public class EmailConfirmModel : AccountPageModel |
|
||||
{ |
|
||||
[Required] |
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public Guid UserId { get; set; } |
|
||||
|
|
||||
[Required] |
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string ConfirmToken { get; set; } |
|
||||
|
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string ReturnUrl { get; set; } |
|
||||
|
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string ReturnUrlHash { get; set; } |
|
||||
|
|
||||
public IMyProfileAppService MyProfileAppService { get; set; } |
|
||||
|
|
||||
public EmailConfirmModel() |
|
||||
{ |
|
||||
LocalizationResourceType = typeof(AccountResource); |
|
||||
} |
|
||||
|
|
||||
public async virtual Task<IActionResult> OnPostAsync() |
|
||||
{ |
|
||||
try |
|
||||
{ |
|
||||
ValidateModel(); |
|
||||
|
|
||||
await MyProfileAppService.ConfirmEmailAsync( |
|
||||
new ConfirmEmailInput |
|
||||
{ |
|
||||
ConfirmToken = ConfirmToken, |
|
||||
}); |
|
||||
} |
|
||||
catch (AbpIdentityResultException e) |
|
||||
{ |
|
||||
if (!string.IsNullOrWhiteSpace(e.Message)) |
|
||||
{ |
|
||||
Alerts.Warning(GetLocalizeExceptionMessage(e)); |
|
||||
return Page(); |
|
||||
} |
|
||||
|
|
||||
throw; |
|
||||
} |
|
||||
catch (AbpValidationException) |
|
||||
{ |
|
||||
return Page(); |
|
||||
} |
|
||||
|
|
||||
return RedirectToPage("./ConfirmEmailConfirmation", new |
|
||||
{ |
|
||||
returnUrl = ReturnUrl, |
|
||||
returnUrlHash = ReturnUrlHash |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,13 +0,0 @@ |
|||||
@page |
|
||||
@model PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account.EmailConfirmConfirmationModel |
|
||||
@inject Volo.Abp.AspNetCore.Mvc.UI.Layout.IPageLayout PageLayout |
|
||||
@using Microsoft.AspNetCore.Mvc.Localization |
|
||||
@using Volo.Abp.Account.Localization |
|
||||
@inject IHtmlLocalizer<AccountResource> L |
|
||||
<div class="card mt-3 shadow-sm rounded"> |
|
||||
<div class="card-body p-5"> |
|
||||
<h4>@L["EmailConfirm"]</h4> |
|
||||
<p>@L["YourEmailIsSuccessfullyConfirm"]</p> |
|
||||
<a abp-button="Primary" href="@Url.Content(Model.ReturnUrl)">@L["GoToTheApplication"]</a> |
|
||||
</div> |
|
||||
</div> |
|
||||
@ -1,22 +0,0 @@ |
|||||
using Microsoft.AspNetCore.Authorization; |
|
||||
using Microsoft.AspNetCore.Mvc; |
|
||||
using Volo.Abp.Account.Web.Pages.Account; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account; |
|
||||
|
|
||||
[AllowAnonymous] |
|
||||
public class EmailConfirmConfirmationModel : AccountPageModel |
|
||||
{ |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string ReturnUrl { get; set; } |
|
||||
|
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string ReturnUrlHash { get; set; } |
|
||||
|
|
||||
public async virtual Task<IActionResult> OnGetAsync() |
|
||||
{ |
|
||||
ReturnUrl = await GetRedirectUrlAsync(ReturnUrl, ReturnUrlHash); |
|
||||
|
|
||||
return Page(); |
|
||||
} |
|
||||
} |
|
||||
@ -1,26 +0,0 @@ |
|||||
@page |
|
||||
@using Microsoft.AspNetCore.Mvc.Localization |
|
||||
@using Volo.Abp.Account.Localization |
|
||||
@model PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account.SendCodeModel |
|
||||
@inject IHtmlLocalizer<AccountResource> L |
|
||||
|
|
||||
<div class="card mt-3 shadow-sm rounded"> |
|
||||
<div class="card-body p-5"> |
|
||||
<h4>@L["TwoFactor"]</h4> |
|
||||
<form method="post" class="mt-4"> |
|
||||
<abp-input asp-for="RememberMe" /> |
|
||||
<input asp-for="ReturnUrl" /> |
|
||||
<input asp-for="ReturnUrlHash" /> |
|
||||
<div class="form-group"> |
|
||||
<abp-select asp-for="Input.SelectedProvider" label="@L["SelectedProvider"].Value" asp-items="@Model.Providers"></abp-select> |
|
||||
</div> |
|
||||
<div class="d-grid gap-2"> |
|
||||
<abp-button type="submit" button-type="Primary" class="mt-2 mb-3">@L["SendVerifyCode"]</abp-button> |
|
||||
</div> |
|
||||
<a asp-page="./Login" asp-all-route-data="@(new Dictionary<string, string> {{"returnUrl", Model.ReturnUrl}, {"returnUrlHash", Model.ReturnUrlHash}})"> |
|
||||
<i class="fa fa-long-arrow-left"></i> @L["Login"] |
|
||||
</a> |
|
||||
</form> |
|
||||
</div> |
|
||||
</div> |
|
||||
|
|
||||
@ -1,125 +0,0 @@ |
|||||
using LINGYUN.Abp.Account.Emailing; |
|
||||
using LINGYUN.Abp.Identity.Settings; |
|
||||
using Microsoft.AspNetCore.Mvc; |
|
||||
using Microsoft.AspNetCore.Mvc.Rendering; |
|
||||
using Volo.Abp; |
|
||||
using Volo.Abp.Account.Localization; |
|
||||
using Volo.Abp.Account.Web.Pages.Account; |
|
||||
using Volo.Abp.Sms; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account |
|
||||
{ |
|
||||
public class SendCodeModel : AccountPageModel |
|
||||
{ |
|
||||
[BindProperty] |
|
||||
public SendCodeInputModel Input { get; set; } |
|
||||
|
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string ReturnUrl { get; set; } |
|
||||
|
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string ReturnUrlHash { get; set; } |
|
||||
|
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public bool RememberMe { get; set; } |
|
||||
|
|
||||
public IEnumerable<SelectListItem> Providers { get; set; } |
|
||||
|
|
||||
protected ISmsSender SmsSender { get; } |
|
||||
|
|
||||
protected IAccountEmailVerifySender AccountEmailVerifySender { get; } |
|
||||
|
|
||||
public SendCodeModel( |
|
||||
ISmsSender smsSender, |
|
||||
IAccountEmailVerifySender accountEmailVerifySender) |
|
||||
{ |
|
||||
SmsSender = smsSender; |
|
||||
AccountEmailVerifySender = accountEmailVerifySender; |
|
||||
|
|
||||
LocalizationResourceType = typeof(AccountResource); |
|
||||
} |
|
||||
|
|
||||
public virtual async Task<IActionResult> OnGetAsync() |
|
||||
{ |
|
||||
Input = new SendCodeInputModel(); |
|
||||
|
|
||||
var user = await SignInManager.GetTwoFactorAuthenticationUserAsync(); |
|
||||
if (user == null) |
|
||||
{ |
|
||||
// ˫������Ϣ��֤ʧ��,һ�㶼�dz�ʱ�˻����û���Ϣ���
|
|
||||
Alerts.Warning(L["TwoFactorAuthenticationInvaidUser"]); |
|
||||
return Page(); |
|
||||
} |
|
||||
var userFactors = await UserManager.GetValidTwoFactorProvidersAsync(user); |
|
||||
Providers = userFactors.Select(purpose => new SelectListItem { Text = purpose, Value = purpose }).ToList(); |
|
||||
|
|
||||
return Page(); |
|
||||
} |
|
||||
|
|
||||
public virtual async Task<IActionResult> OnPostAsync() |
|
||||
{ |
|
||||
var user = await SignInManager.GetTwoFactorAuthenticationUserAsync(); |
|
||||
if (user == null) |
|
||||
{ |
|
||||
Alerts.Warning(L["TwoFactorAuthenticationInvaidUser"]); |
|
||||
return Page(); |
|
||||
} |
|
||||
|
|
||||
if (Input.SelectedProvider == "Authenticator") |
|
||||
{ |
|
||||
// �û�ͨ���ʼ�/�������ӽ�����Ȩҳ��
|
|
||||
return RedirectToPage("VerifyAuthenticatorCode", new |
|
||||
{ |
|
||||
returnUrl = ReturnUrl, |
|
||||
returnUrlHash = ReturnUrlHash, |
|
||||
rememberMe = RememberMe |
|
||||
}); |
|
||||
} |
|
||||
// ������֤��
|
|
||||
var code = await UserManager.GenerateTwoFactorTokenAsync(user, Input.SelectedProvider); |
|
||||
if (string.IsNullOrWhiteSpace(code)) |
|
||||
{ |
|
||||
Alerts.Warning(L["InvaidGenerateTwoFactorToken"]); |
|
||||
return Page(); |
|
||||
} |
|
||||
|
|
||||
if (Input.SelectedProvider == "Email") |
|
||||
{ |
|
||||
await AccountEmailVerifySender |
|
||||
.SendMailLoginVerifyCodeAsync( |
|
||||
code, |
|
||||
user.UserName, |
|
||||
user.Email); |
|
||||
} |
|
||||
else if (Input.SelectedProvider == "Phone") |
|
||||
{ |
|
||||
var phoneNumber = await UserManager.GetPhoneNumberAsync(user); |
|
||||
var templateCode = await SettingProvider.GetOrNullAsync(IdentitySettingNames.User.SmsUserSignin); |
|
||||
Check.NotNullOrWhiteSpace(templateCode, nameof(IdentitySettingNames.User.SmsUserSignin)); |
|
||||
|
|
||||
// TODO: �Ժ���չ����ģ�巢��
|
|
||||
var smsMessage = new SmsMessage(phoneNumber, code); |
|
||||
smsMessage.Properties.Add("code", code); |
|
||||
smsMessage.Properties.Add("TemplateCode", templateCode); |
|
||||
|
|
||||
await SmsSender.SendAsync(smsMessage); |
|
||||
} |
|
||||
|
|
||||
return RedirectToPage("VerifyCode", new |
|
||||
{ |
|
||||
provider = Input.SelectedProvider, |
|
||||
returnUrl = ReturnUrl, |
|
||||
returnUrlHash = ReturnUrlHash, |
|
||||
rememberMe = RememberMe |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
public class SendCodeInputModel |
|
||||
{ |
|
||||
public string SelectedProvider { get; set; } |
|
||||
} |
|
||||
} |
|
||||
@ -1,16 +0,0 @@ |
|||||
@page |
|
||||
@inject IHtmlLocalizer<AccountResource> L |
|
||||
@using Microsoft.AspNetCore.Mvc.Localization |
|
||||
@using Volo.Abp.Account.Localization |
|
||||
@model PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account.SendEmailConfirmModel |
|
||||
@inject Volo.Abp.AspNetCore.Mvc.UI.Layout.IPageLayout PageLayout |
|
||||
<div class="card mt-3 shadow-sm rounded"> |
|
||||
<div class="card-body p-5"> |
|
||||
<h4>@L["EmailConfirm"]</h4> |
|
||||
<form method="post"> |
|
||||
<abp-input asp-for="Email" readonly="true" /> |
|
||||
<a abp-button="Secondary" asp-page="./Login">@L["Cancel"]</a> |
|
||||
<abp-button type="submit" button-type="Primary" text="@L["ClickToValidation"].Value"/> |
|
||||
</form> |
|
||||
</div> |
|
||||
</div> |
|
||||
@ -1,73 +0,0 @@ |
|||||
using LINGYUN.Abp.Account; |
|
||||
using Microsoft.AspNetCore.Mvc; |
|
||||
using Volo.Abp.Account.Localization; |
|
||||
using Volo.Abp.Account.Web.Pages.Account; |
|
||||
using Volo.Abp.Identity; |
|
||||
using Volo.Abp.Validation; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account |
|
||||
{ |
|
||||
public class SendEmailConfirmModel : AccountPageModel |
|
||||
{ |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string Email { get; set; } |
|
||||
|
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string ReturnUrl { get; set; } |
|
||||
|
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string ReturnUrlHash { get; set; } |
|
||||
|
|
||||
public IMyProfileAppService MyProfileAppService { get; set; } |
|
||||
|
|
||||
public SendEmailConfirmModel() |
|
||||
{ |
|
||||
LocalizationResourceType = typeof(AccountResource); |
|
||||
} |
|
||||
|
|
||||
public virtual Task<IActionResult> OnGetAsync() |
|
||||
{ |
|
||||
Email = CurrentUser.Email; |
|
||||
|
|
||||
return Task.FromResult<IActionResult>(Page()); |
|
||||
} |
|
||||
|
|
||||
public async virtual Task<IActionResult> OnPostAsync() |
|
||||
{ |
|
||||
try |
|
||||
{ |
|
||||
ValidateModel(); |
|
||||
|
|
||||
await MyProfileAppService.SendEmailConfirmLinkAsync( |
|
||||
new SendEmailConfirmCodeDto |
|
||||
{ |
|
||||
Email = Email, |
|
||||
AppName = "MVC", |
|
||||
ReturnUrl = ReturnUrl, |
|
||||
ReturnUrlHash = ReturnUrlHash |
|
||||
}); |
|
||||
} |
|
||||
catch (AbpIdentityResultException e) |
|
||||
{ |
|
||||
if (!string.IsNullOrWhiteSpace(e.Message)) |
|
||||
{ |
|
||||
Alerts.Warning(GetLocalizeExceptionMessage(e)); |
|
||||
return Page(); |
|
||||
} |
|
||||
|
|
||||
throw; |
|
||||
} |
|
||||
catch (AbpValidationException) |
|
||||
{ |
|
||||
return Page(); |
|
||||
} |
|
||||
|
|
||||
return RedirectToPage("~/Account/Manage", new |
|
||||
{ |
|
||||
returnUrl = ReturnUrl |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,63 +0,0 @@ |
|||||
using Microsoft.AspNetCore.Authentication; |
|
||||
using Microsoft.AspNetCore.Mvc; |
|
||||
using Microsoft.Extensions.Options; |
|
||||
using Volo.Abp.Account.Web; |
|
||||
using Volo.Abp.Account.Web.Pages.Account; |
|
||||
using Volo.Abp.DependencyInjection; |
|
||||
using Volo.Abp.Identity; |
|
||||
using Volo.Abp.OpenIddict; |
|
||||
using IdentityOptions = Microsoft.AspNetCore.Identity.IdentityOptions; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account |
|
||||
{ |
|
||||
/// <summary>
|
|
||||
/// 重写登录模型,实现双因素登录
|
|
||||
/// </summary>
|
|
||||
[Dependency(ReplaceServices = true)] |
|
||||
[ExposeServices(typeof(LoginModel), typeof(OpenIddictSupportedLoginModel))] |
|
||||
public class TwoFactorSupportedLoginModel : OpenIddictSupportedLoginModel |
|
||||
{ |
|
||||
public TwoFactorSupportedLoginModel( |
|
||||
IAuthenticationSchemeProvider schemeProvider, |
|
||||
IOptions<AbpAccountOptions> accountOptions, |
|
||||
IOptions<IdentityOptions> identityOptions, |
|
||||
IdentityDynamicClaimsPrincipalContributorCache identityDynamicClaimsPrincipalContributorCache, |
|
||||
AbpOpenIddictRequestHelper openIddictRequestHelper) |
|
||||
: base(schemeProvider, accountOptions, identityOptions, identityDynamicClaimsPrincipalContributorCache, openIddictRequestHelper) |
|
||||
{ |
|
||||
|
|
||||
} |
|
||||
|
|
||||
protected async override Task<List<ExternalProviderModel>> GetExternalProviders() |
|
||||
{ |
|
||||
var providers = await base.GetExternalProviders(); |
|
||||
|
|
||||
foreach (var provider in providers) |
|
||||
{ |
|
||||
var localizedDisplayName = L[provider.DisplayName]; |
|
||||
if (localizedDisplayName.ResourceNotFound) |
|
||||
{ |
|
||||
localizedDisplayName = L["AuthenticationScheme:" + provider.DisplayName]; |
|
||||
} |
|
||||
|
|
||||
if (!localizedDisplayName.ResourceNotFound) |
|
||||
{ |
|
||||
provider.DisplayName = localizedDisplayName.Value; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
return providers; |
|
||||
} |
|
||||
|
|
||||
protected override Task<IActionResult> TwoFactorLoginResultAsync() |
|
||||
{ |
|
||||
// 重定向双因素认证页面
|
|
||||
return Task.FromResult<IActionResult>(RedirectToPage("SendCode", new |
|
||||
{ |
|
||||
returnUrl = ReturnUrl, |
|
||||
returnUrlHash = ReturnUrlHash, |
|
||||
rememberMe = LoginInput.RememberMe |
|
||||
})); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,4 +0,0 @@ |
|||||
@page |
|
||||
@model PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account.UseRecoveryCodeModel |
|
||||
@{ |
|
||||
} |
|
||||
@ -1,11 +0,0 @@ |
|||||
using Microsoft.AspNetCore.Mvc.RazorPages; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account |
|
||||
{ |
|
||||
public class UseRecoveryCodeModel : PageModel |
|
||||
{ |
|
||||
public void OnGet() |
|
||||
{ |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,26 +0,0 @@ |
|||||
@page |
|
||||
@using Microsoft.AspNetCore.Mvc.Localization |
|
||||
@using Volo.Abp.Account.Localization |
|
||||
@model PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account.VerifyAuthenticatorCodeModel |
|
||||
@inject IHtmlLocalizer<AccountResource> L |
|
||||
<div class="card mt-3 shadow-sm rounded"> |
|
||||
<div class="card-body p-5"> |
|
||||
<form method="post" class="mt-4"> |
|
||||
<input asp-for="RememberMe" /> |
|
||||
<input asp-for="ReturnUrlHash" /> |
|
||||
<div class="form-group"> |
|
||||
<label asp-for="Input.VerifyCode"></label> |
|
||||
<input asp-for="Input.VerifyCode" class="form-control" /> |
|
||||
<span asp-validation-for="Input.VerifyCode" class="text-danger"></span> |
|
||||
</div> |
|
||||
<div class="form-group"> |
|
||||
<label asp-for="RememberBrowser"></label> |
|
||||
<abp-input asp-for="RememberBrowser" /> |
|
||||
</div> |
|
||||
<abp-button type="submit" button-type="Primary" class="btn-block btn-lg mt-3">@L["VerifyAuthenticatorCode"]</abp-button> |
|
||||
<a asp-page="./Login" asp-all-route-data="@(new Dictionary<string, string> {{"returnUrl", Model.ReturnUrl}, {"returnUrlHash", Model.ReturnUrlHash}})"> |
|
||||
<i class="fa fa-long-arrow-left"></i> @L["Login"] |
|
||||
</a> |
|
||||
</form> |
|
||||
</div> |
|
||||
</div> |
|
||||
@ -1,59 +0,0 @@ |
|||||
using Microsoft.AspNetCore.Mvc; |
|
||||
using System.ComponentModel.DataAnnotations; |
|
||||
using Volo.Abp.Account.Web.Pages.Account; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account |
|
||||
{ |
|
||||
public class VerifyAuthenticatorCodeModel : AccountPageModel |
|
||||
{ |
|
||||
[BindProperty] |
|
||||
public VerifyAuthenticatorCodeInputModel Input { get; set; } |
|
||||
|
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string ReturnUrl { get; set; } |
|
||||
|
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string ReturnUrlHash { get; set; } |
|
||||
|
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public bool RememberBrowser { get; set; } |
|
||||
|
|
||||
[HiddenInput] |
|
||||
public bool RememberMe { get; set; } |
|
||||
|
|
||||
public virtual IActionResult OnGet() |
|
||||
{ |
|
||||
Input = new VerifyAuthenticatorCodeInputModel(); |
|
||||
|
|
||||
return Page(); |
|
||||
} |
|
||||
|
|
||||
public virtual async Task<IActionResult> OnPostAsync() |
|
||||
{ |
|
||||
var result = await SignInManager.TwoFactorAuthenticatorSignInAsync(Input.VerifyCode, RememberMe, RememberBrowser); |
|
||||
if (result.Succeeded) |
|
||||
{ |
|
||||
return await RedirectSafelyAsync(ReturnUrl, ReturnUrlHash); |
|
||||
} |
|
||||
if (result.IsLockedOut) |
|
||||
{ |
|
||||
Logger.LogWarning(7, "User account locked out."); |
|
||||
Alerts.Warning(L["UserLockedOutMessage"]); |
|
||||
return Page(); |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
Alerts.Danger(L["TwoFactorAuthenticationInvaidUser"]);// TODO: ����״̬��Ľ��
|
|
||||
return Page(); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
public class VerifyAuthenticatorCodeInputModel |
|
||||
{ |
|
||||
[Required] |
|
||||
public string VerifyCode { get; set; } |
|
||||
} |
|
||||
} |
|
||||
@ -1,29 +0,0 @@ |
|||||
@page |
|
||||
@inject IHtmlLocalizer<AccountResource> L |
|
||||
@using Microsoft.AspNetCore.Mvc.Localization |
|
||||
@using Volo.Abp.Account.Localization |
|
||||
@model PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account.VerifyCodeModel |
|
||||
<div class="card mt-3 shadow-sm rounded"> |
|
||||
<div class="card-body p-5"> |
|
||||
<form method="post" class="mt-4"> |
|
||||
<input asp-for="Provider" /> |
|
||||
<input asp-for="ReturnUrl" /> |
|
||||
<input asp-for="ReturnUrlHash" /> |
|
||||
<input asp-for="RememberMe" /> |
|
||||
<div class="form-group"> |
|
||||
<abp-input asp-for="Input.VerifyCode" label="@L["VerifyCode"].Value" class="form-control" /> |
|
||||
</div> |
|
||||
<abp-row> |
|
||||
<abp-column> |
|
||||
<abp-input asp-for="Input.RememberBrowser" label="@L["RememberBrowser"].Value" /> |
|
||||
</abp-column> |
|
||||
</abp-row> |
|
||||
<div class="d-grid gap-2"> |
|
||||
<abp-button type="submit" button-type="Primary" class="mt-2 mb-3">@L["VerifyAuthenticatorCode"]</abp-button> |
|
||||
</div> |
|
||||
<a asp-page="./SendCode" asp-all-route-data="@(new Dictionary<string, string> {{"returnUrl", Model.ReturnUrl}, {"returnUrlHash", Model.ReturnUrlHash}})"> |
|
||||
<i class="fa fa-long-arrow-left"></i> @L["ReSendVerifyCode"] |
|
||||
</a> |
|
||||
</form> |
|
||||
</div> |
|
||||
</div> |
|
||||
@ -1,90 +0,0 @@ |
|||||
using Microsoft.AspNetCore.Mvc; |
|
||||
using System.ComponentModel.DataAnnotations; |
|
||||
using Volo.Abp.Account.Localization; |
|
||||
using Volo.Abp.Account.Web.Pages.Account; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.Pages.Account |
|
||||
{ |
|
||||
public class VerifyCodeModel : AccountPageModel |
|
||||
{ |
|
||||
[BindProperty] |
|
||||
public VerifyCodeInputModel Input { get; set; } |
|
||||
/// <summary>
|
|
||||
/// ˫������֤�ṩ����
|
|
||||
/// </summary>
|
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string Provider { get; set; } |
|
||||
/// <summary>
|
|
||||
/// �ض���Url
|
|
||||
/// </summary>
|
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string ReturnUrl { get; set; } |
|
||||
/// <summary>
|
|
||||
///
|
|
||||
/// </summary>
|
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public string ReturnUrlHash { get; set; } |
|
||||
/// <summary>
|
|
||||
/// �Ƿ��ס��¼״̬
|
|
||||
/// </summary>
|
|
||||
[HiddenInput] |
|
||||
[BindProperty(SupportsGet = true)] |
|
||||
public bool RememberMe { get; set; } |
|
||||
|
|
||||
public VerifyCodeModel() |
|
||||
{ |
|
||||
LocalizationResourceType = typeof(AccountResource); |
|
||||
} |
|
||||
|
|
||||
public virtual IActionResult OnGet() |
|
||||
{ |
|
||||
Input = new VerifyCodeInputModel(); |
|
||||
|
|
||||
return Page(); |
|
||||
} |
|
||||
|
|
||||
public virtual async Task<IActionResult> OnPostAsync() |
|
||||
{ |
|
||||
// ��֤�û���¼״̬
|
|
||||
var user = await SignInManager.GetTwoFactorAuthenticationUserAsync(); |
|
||||
if (user == null) |
|
||||
{ |
|
||||
Alerts.Warning(L["TwoFactorAuthenticationInvaidUser"]); |
|
||||
return Page(); |
|
||||
} |
|
||||
// ˫���ص�¼
|
|
||||
var result = await SignInManager.TwoFactorSignInAsync(Provider, Input.VerifyCode, RememberMe, Input.RememberBrowser); |
|
||||
if (result.Succeeded) |
|
||||
{ |
|
||||
return await RedirectSafelyAsync(ReturnUrl, ReturnUrlHash); |
|
||||
} |
|
||||
if (result.IsLockedOut) |
|
||||
{ |
|
||||
Logger.LogWarning(7, "User account locked out."); |
|
||||
Alerts.Warning(L["UserLockedOutMessage"]); |
|
||||
return Page(); |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
Alerts.Danger(L["TwoFactorAuthenticationInvaidUser"]);// TODO: ����״̬��Ľ��
|
|
||||
return Page(); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
public class VerifyCodeInputModel |
|
||||
{ |
|
||||
/// <summary>
|
|
||||
/// �Ƿ���������м�ס��¼״̬
|
|
||||
/// </summary>
|
|
||||
public bool RememberBrowser { get; set; } |
|
||||
/// <summary>
|
|
||||
/// ���͵���֤��
|
|
||||
/// </summary>
|
|
||||
[Required] |
|
||||
public string VerifyCode { get; set; } |
|
||||
} |
|
||||
} |
|
||||
@ -1,36 +0,0 @@ |
|||||
@page |
|
||||
@using Microsoft.AspNetCore.Mvc.TagHelpers |
|
||||
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Alert |
|
||||
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Grid |
|
||||
@using Volo.Abp.Users |
|
||||
@model PackageName.CompanyName.ProjectName.AIO.Host.Pages.IndexModel |
|
||||
@inject ICurrentUser CurrentUser |
|
||||
@if (CurrentUser.IsAuthenticated) |
|
||||
{ |
|
||||
<div> |
|
||||
<abp-row> |
|
||||
<abp-column size-md="_3" class="text-center"> |
|
||||
<i class="fa fa-user d-block" style="font-size: 10em; color: #12b900"></i> |
|
||||
<a abp-button="Primary" asp-controller="Logout" asp-action="Index" asp-area="Account">Logout</a> |
|
||||
</abp-column> |
|
||||
<abp-column size-md="_9"> |
|
||||
<h2>@CurrentUser.UserName</h2> |
|
||||
<h5 class="text-muted">@CurrentUser.Email</h5> |
|
||||
<div> |
|
||||
<strong>Roles</strong>: @CurrentUser.Roles.JoinAsString(", ") |
|
||||
<br /> |
|
||||
<strong>Claims</strong>: <br /> |
|
||||
@Html.Raw(CurrentUser.GetAllClaims().Select(c => $"{c.Type}={c.Value}").JoinAsString(" <br /> ")) |
|
||||
</div> |
|
||||
</abp-column> |
|
||||
</abp-row> |
|
||||
</div> |
|
||||
} |
|
||||
|
|
||||
@if (!CurrentUser.IsAuthenticated) |
|
||||
{ |
|
||||
<div class="text-center"> |
|
||||
<i class="fa fa-user d-block" style="font-size: 10em; color: #aaa"></i><br/><br /> |
|
||||
<a abp-button="Primary" asp-page="/Account/Login">Login</a> |
|
||||
</div> |
|
||||
} |
|
||||
@ -1,11 +0,0 @@ |
|||||
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.Pages |
|
||||
{ |
|
||||
public class IndexModel : AbpPageModel |
|
||||
{ |
|
||||
public void OnGet() |
|
||||
{ |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,4 +0,0 @@ |
|||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers |
|
||||
@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI |
|
||||
@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap |
|
||||
@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bundling |
|
||||
@ -1,82 +0,0 @@ |
|||||
using LINGYUN.Abp.Identity.Session.AspNetCore; |
|
||||
using PackageName.CompanyName.ProjectName.AIO.Host; |
|
||||
using Microsoft.AspNetCore.Cors; |
|
||||
using Serilog; |
|
||||
using Volo.Abp.IO; |
|
||||
using Volo.Abp.Modularity.PlugIns; |
|
||||
|
|
||||
var builder = WebApplication.CreateBuilder(args); |
|
||||
builder.Services.AddCors(options => |
|
||||
{ |
|
||||
options.AddDefaultPolicy(policy => |
|
||||
{ |
|
||||
policy |
|
||||
.WithOrigins( |
|
||||
builder.Configuration["App:CorsOrigins"] |
|
||||
.Split(",", StringSplitOptions.RemoveEmptyEntries) |
|
||||
.Select(o => o.RemovePostFix("/")) |
|
||||
.ToArray() |
|
||||
) |
|
||||
.WithAbpExposedHeaders() |
|
||||
.WithAbpWrapExposedHeaders() |
|
||||
.SetIsOriginAllowedToAllowWildcardSubdomains() |
|
||||
.AllowAnyHeader() |
|
||||
.AllowAnyMethod() |
|
||||
.AllowCredentials(); |
|
||||
}); |
|
||||
}); |
|
||||
builder.Host.AddAppSettingsSecretsJson() |
|
||||
.UseAutofac() |
|
||||
.UseSerilog((context, provider, config) => |
|
||||
{ |
|
||||
config.ReadFrom.Configuration(context.Configuration); |
|
||||
}); |
|
||||
|
|
||||
await builder.AddApplicationAsync<MicroServiceApplicationsSingleModule>(options => |
|
||||
{ |
|
||||
MicroServiceApplicationsSingleModule.ApplicationName = Environment.GetEnvironmentVariable("APPLICATION_NAME") |
|
||||
?? MicroServiceApplicationsSingleModule.ApplicationName; |
|
||||
options.ApplicationName = MicroServiceApplicationsSingleModule.ApplicationName; |
|
||||
options.Configuration.UserSecretsId = Environment.GetEnvironmentVariable("APPLICATION_USER_SECRETS_ID"); |
|
||||
options.Configuration.UserSecretsAssembly = typeof(MicroServiceApplicationsSingleModule).Assembly; |
|
||||
var pluginFolder = Path.Combine( |
|
||||
Directory.GetCurrentDirectory(), "Modules"); |
|
||||
DirectoryHelper.CreateIfNotExists(pluginFolder); |
|
||||
options.PlugInSources.AddFolder( |
|
||||
pluginFolder, |
|
||||
SearchOption.AllDirectories); |
|
||||
}); |
|
||||
|
|
||||
var app = builder.Build(); |
|
||||
|
|
||||
await app.InitializeApplicationAsync(); |
|
||||
|
|
||||
app.UseForwardedHeaders(); |
|
||||
if (app.Environment.IsDevelopment()) |
|
||||
{ |
|
||||
app.UseDeveloperExceptionPage(); |
|
||||
} |
|
||||
// app.UseAbpExceptionHandling();
|
|
||||
app.UseCookiePolicy(); |
|
||||
app.UseMapRequestLocalization(); |
|
||||
app.UseCorrelationId(); |
|
||||
app.UseStaticFiles(); |
|
||||
app.UseRouting(); |
|
||||
app.UseCors(); |
|
||||
app.UseAuthentication(); |
|
||||
app.UseMultiTenancy(); |
|
||||
app.UseUnitOfWork(); |
|
||||
app.UseAbpOpenIddictValidation(); |
|
||||
app.UseAbpSession(); |
|
||||
app.UseDynamicClaims(); |
|
||||
app.UseAuthorization(); |
|
||||
app.UseSwagger(); |
|
||||
app.UseSwaggerUI(options => |
|
||||
{ |
|
||||
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support App API"); |
|
||||
}); |
|
||||
app.UseAuditing(); |
|
||||
app.UseAbpSerilogEnrichers(); |
|
||||
app.UseConfiguredEndpoints(); |
|
||||
|
|
||||
await app.RunAsync(); |
|
||||
@ -1,30 +0,0 @@ |
|||||
{ |
|
||||
"iisSettings": { |
|
||||
"windowsAuthentication": false, |
|
||||
"anonymousAuthentication": true, |
|
||||
"iisExpress": { |
|
||||
"applicationUrl": "http://localhost:19139", |
|
||||
"sslPort": 0 |
|
||||
} |
|
||||
}, |
|
||||
"profiles": { |
|
||||
"LY.MicroService.Applications.Single": { |
|
||||
"commandName": "Project", |
|
||||
"dotnetRunMessages": true, |
|
||||
"launchBrowser": false, |
|
||||
"applicationUrl": "http://0.0.0.0:30001", |
|
||||
"environmentVariables": { |
|
||||
"ASPNETCORE_ENVIRONMENT": "Production" |
|
||||
} |
|
||||
}, |
|
||||
"LY.MicroService.Applications.Single.Development": { |
|
||||
"commandName": "Project", |
|
||||
"dotnetRunMessages": true, |
|
||||
"launchBrowser": false, |
|
||||
"applicationUrl": "http://0.0.0.0:30000", |
|
||||
"environmentVariables": { |
|
||||
"ASPNETCORE_ENVIRONMENT": "Development" |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,35 +0,0 @@ |
|||||
using Microsoft.Extensions.Options; |
|
||||
using Microsoft.OpenApi.Models; |
|
||||
using Swashbuckle.AspNetCore.SwaggerGen; |
|
||||
using Volo.Abp.AspNetCore.MultiTenancy; |
|
||||
using Volo.Abp.MultiTenancy; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host; |
|
||||
|
|
||||
public class TenantHeaderParamter : IOperationFilter |
|
||||
{ |
|
||||
private readonly AbpMultiTenancyOptions _multiTenancyOptions; |
|
||||
private readonly AbpAspNetCoreMultiTenancyOptions _aspNetCoreMultiTenancyOptions; |
|
||||
public TenantHeaderParamter( |
|
||||
IOptions<AbpMultiTenancyOptions> multiTenancyOptions, |
|
||||
IOptions<AbpAspNetCoreMultiTenancyOptions> aspNetCoreMultiTenancyOptions) |
|
||||
{ |
|
||||
_multiTenancyOptions = multiTenancyOptions.Value; |
|
||||
_aspNetCoreMultiTenancyOptions = aspNetCoreMultiTenancyOptions.Value; |
|
||||
} |
|
||||
|
|
||||
public void Apply(OpenApiOperation operation, OperationFilterContext context) |
|
||||
{ |
|
||||
if (_multiTenancyOptions.IsEnabled) |
|
||||
{ |
|
||||
operation.Parameters = operation.Parameters ?? new List<OpenApiParameter>(); |
|
||||
operation.Parameters.Add(new OpenApiParameter |
|
||||
{ |
|
||||
Name = _aspNetCoreMultiTenancyOptions.TenantKey, |
|
||||
In = ParameterLocation.Header, |
|
||||
Description = "Tenant Id in http header", |
|
||||
Required = false |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,21 +0,0 @@ |
|||||
using LINGYUN.Abp.WeChat.Common.Messages.Handlers; |
|
||||
using LINGYUN.Abp.WeChat.Official.Messages.Models; |
|
||||
using LINGYUN.Abp.WeChat.Official.Services; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.WeChat.Official.Messages; |
|
||||
/// <summary>
|
|
||||
/// 文本消息客服回复
|
|
||||
/// </summary>
|
|
||||
public class TextMessageReplyContributor : IMessageHandleContributor<TextMessage> |
|
||||
{ |
|
||||
public async virtual Task HandleAsync(MessageHandleContext<TextMessage> context) |
|
||||
{ |
|
||||
var messageSender = context.ServiceProvider.GetRequiredService<IServiceCenterMessageSender>(); |
|
||||
|
|
||||
await messageSender.SendAsync( |
|
||||
new LINGYUN.Abp.WeChat.Official.Services.Models.TextMessageModel( |
|
||||
context.Message.FromUserName, |
|
||||
new LINGYUN.Abp.WeChat.Official.Services.Models.TextMessage( |
|
||||
context.Message.Content))); |
|
||||
} |
|
||||
} |
|
||||
@ -1,21 +0,0 @@ |
|||||
using LINGYUN.Abp.WeChat.Common.Messages.Handlers; |
|
||||
using LINGYUN.Abp.WeChat.Official.Messages.Models; |
|
||||
using LINGYUN.Abp.WeChat.Official.Services; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.WeChat.Official.Messages; |
|
||||
/// <summary>
|
|
||||
/// 用户关注回复消息
|
|
||||
/// </summary>
|
|
||||
public class UserSubscribeEventContributor : IEventHandleContributor<UserSubscribeEvent> |
|
||||
{ |
|
||||
public async virtual Task HandleAsync(MessageHandleContext<UserSubscribeEvent> context) |
|
||||
{ |
|
||||
var messageSender = context.ServiceProvider.GetRequiredService<IServiceCenterMessageSender>(); |
|
||||
|
|
||||
await messageSender.SendAsync( |
|
||||
new LINGYUN.Abp.WeChat.Official.Services.Models.TextMessageModel( |
|
||||
context.Message.FromUserName, |
|
||||
new LINGYUN.Abp.WeChat.Official.Services.Models.TextMessage( |
|
||||
"感谢您的关注, 点击菜单了解更多."))); |
|
||||
} |
|
||||
} |
|
||||
@ -1,24 +0,0 @@ |
|||||
using LINGYUN.Abp.WeChat.Common.Messages.Handlers; |
|
||||
using LINGYUN.Abp.WeChat.Work.Common.Messages.Models; |
|
||||
using LINGYUN.Abp.WeChat.Work.Messages; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.AIO.Host.WeChat.Work.Messages; |
|
||||
/// <summary>
|
|
||||
/// 文本消息客服回复
|
|
||||
/// </summary>
|
|
||||
public class TextMessageReplyContributor : IMessageHandleContributor<TextMessage> |
|
||||
{ |
|
||||
public async virtual Task HandleAsync(MessageHandleContext<TextMessage> context) |
|
||||
{ |
|
||||
var messageSender = context.ServiceProvider.GetRequiredService<IWeChatWorkMessageSender>(); |
|
||||
|
|
||||
await messageSender.SendAsync( |
|
||||
new LINGYUN.Abp.WeChat.Work.Messages.Models.WeChatWorkTextMessage( |
|
||||
context.Message.AgentId.ToString(), |
|
||||
new LINGYUN.Abp.WeChat.Work.Messages.Models.TextMessage( |
|
||||
context.Message.Content)) |
|
||||
{ |
|
||||
ToUser = context.Message.FromUserName, |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
@ -1,249 +0,0 @@ |
|||||
{ |
|
||||
"App": { |
|
||||
"ShowPii": true, |
|
||||
"SelfUrl": "http://127.0.0.1:30001/", |
|
||||
"CorsOrigins": "http://127.0.0.1:3100,http://127.0.0.1:30001", |
|
||||
"Urls": { |
|
||||
"Applications": { |
|
||||
"MVC": { |
|
||||
"RootUrl": "http://127.0.0.1:30001/", |
|
||||
"Urls": { |
|
||||
"Abp.Account.EmailConfirm": "Account/EmailConfirm", |
|
||||
"Abp.Account.EmailVerifyLogin": "Account/VerifyCode" |
|
||||
} |
|
||||
}, |
|
||||
"STS": { |
|
||||
"RootUrl": "http://127.0.0.1:30001/" |
|
||||
}, |
|
||||
"VueVbenAdmin": { |
|
||||
"RootUrl": "http://127.0.0.1:3100", |
|
||||
"Urls": { |
|
||||
"Abp.Account.EmailConfirm": "account/email-confirm" |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
"Auditing": { |
|
||||
"AllEntitiesSelector": true |
|
||||
}, |
|
||||
"DistributedCache": { |
|
||||
"HideErrors": true, |
|
||||
"KeyPrefix": "LINGYUN.Abp.Application", |
|
||||
"GlobalCacheEntryOptions": { |
|
||||
"SlidingExpiration": "30:00:00", |
|
||||
"AbsoluteExpirationRelativeToNow": "60:00:00" |
|
||||
} |
|
||||
}, |
|
||||
"ConnectionStrings": { |
|
||||
"Default": "Server=127.0.0.1;Database=Platform-V70;User Id=root;Password=123456;SslMode=None"//Mysql |
|
||||
// "Default": "Host=127.0.0.1;Database=Platform-V70;Username=postgres;Password=123456;"//Postgres |
|
||||
}, |
|
||||
"DistributedLock": { |
|
||||
"IsEnabled": true, |
|
||||
"Redis": { |
|
||||
"Configuration": "127.0.0.1,defaultDatabase=14" |
|
||||
} |
|
||||
}, |
|
||||
"Elsa": { |
|
||||
"Features": { |
|
||||
"DefaultPersistence": { |
|
||||
"Enabled": true, |
|
||||
"ConnectionStringIdentifier": "Default", |
|
||||
"EntityFrameworkCore": { |
|
||||
"MySql": { |
|
||||
"Enabled": true |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
"Console": true, |
|
||||
"Http": true, |
|
||||
"Email": true, |
|
||||
"TemporalQuartz": true, |
|
||||
"JavaScriptActivities": true, |
|
||||
"UserTask": true, |
|
||||
"Conductor": true, |
|
||||
"Telnyx": true, |
|
||||
"BlobStoring": true, |
|
||||
"Emailing": true, |
|
||||
"Notification": true, |
|
||||
"Sms": true, |
|
||||
"IM": true, |
|
||||
"PublishWebhook": true, |
|
||||
"Webhooks": { |
|
||||
"Enabled": true, |
|
||||
"ConnectionStringIdentifier": "Default", |
|
||||
"EntityFrameworkCore": { |
|
||||
"MySql": { |
|
||||
"Enabled": true |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
"WorkflowSettings": { |
|
||||
"Enabled": true, |
|
||||
"ConnectionStringIdentifier": "Default", |
|
||||
"EntityFrameworkCore": { |
|
||||
"MySql": { |
|
||||
"Enabled": true |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
"Server": { |
|
||||
"BaseUrl": "http://127.0.0.1:30000" |
|
||||
} |
|
||||
}, |
|
||||
"Quartz": { |
|
||||
"UsePersistentStore": false, |
|
||||
"Properties": { |
|
||||
"quartz.jobStore.dataSource": "tkm", |
|
||||
"quartz.jobStore.type": "Quartz.Impl.AdoJobStore.JobStoreTX,Quartz", |
|
||||
"quartz.dataSource.tkm.connectionStringName": "Default", |
|
||||
"quartz.jobStore.driverDelegateType": "Quartz.Impl.AdoJobStore.MySQLDelegate,Quartz", |
|
||||
"quartz.dataSource.tkm.connectionString": "Server=127.0.0.1;Database=Platform-V70;User Id=root;Password=123456", |
|
||||
"quartz.dataSource.tkm.provider": "MySqlConnector", |
|
||||
// "quartz.jobStore.driverDelegateType": "Quartz.Impl.AdoJobStore.PostgreSQLDelegate,Quartz", |
|
||||
// "quartz.dataSource.tkm.connectionString": "Host=127.0.0.1;Database=Platform-V70;Username=postgres;Password=123456;", |
|
||||
// "quartz.dataSource.tkm.provider": "Npgsql", |
|
||||
"quartz.jobStore.clustered": "true", |
|
||||
"quartz.serializer.type": "json" |
|
||||
} |
|
||||
}, |
|
||||
"Redis": { |
|
||||
"IsEnabled": true, |
|
||||
"Configuration": "127.0.0.1,defaultDatabase=15", |
|
||||
"InstanceName": "LINGYUN.Abp.Application" |
|
||||
}, |
|
||||
"Features": { |
|
||||
"Validation": { |
|
||||
"Redis": { |
|
||||
"Configuration": "127.0.0.1,defaultDatabase=13", |
|
||||
"InstanceName": "LINGYUN.Abp.Application" |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
"AuthServer": { |
|
||||
"UseOpenIddict": true, |
|
||||
"Authority": "http://127.0.0.1:30001/", |
|
||||
"Audience": "lingyun-abp-application", |
|
||||
"RequireHttpsMetadata": false, |
|
||||
"SwaggerClientId": "InternalServiceClient", |
|
||||
"SwaggerClientSecret": "1q2w3E*" |
|
||||
}, |
|
||||
"IdentityServer": { |
|
||||
"Clients": { |
|
||||
"VueAdmin": { |
|
||||
"ClientId": "vue-admin-client", |
|
||||
"RootUrl": "http://127.0.0.1:3100/" |
|
||||
}, |
|
||||
"InternalService": { |
|
||||
"ClientId": "InternalServiceClient" |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
"OpenIddict": { |
|
||||
"Applications": { |
|
||||
"VueAdmin": { |
|
||||
"ClientId": "vue-admin-client", |
|
||||
"RootUrl": "http://127.0.0.1:3100/" |
|
||||
}, |
|
||||
"InternalService": { |
|
||||
"ClientId": "InternalServiceClient" |
|
||||
} |
|
||||
}, |
|
||||
"Lifetime": { |
|
||||
"AuthorizationCode": "00:05:00", |
|
||||
"AccessToken": "14:00:00", |
|
||||
"DeviceCode": "00:10:00", |
|
||||
"IdentityToken": "00:20:00", |
|
||||
"RefreshToken": "14:00:00", |
|
||||
"RefreshTokenReuseLeeway": "00:00:30", |
|
||||
"UserCode": "00:10:00" |
|
||||
} |
|
||||
}, |
|
||||
"Identity": { |
|
||||
"Password": { |
|
||||
"RequiredLength": 6, |
|
||||
"RequiredUniqueChars": 0, |
|
||||
"RequireNonAlphanumeric": false, |
|
||||
"RequireLowercase": false, |
|
||||
"RequireUppercase": false, |
|
||||
"RequireDigit": false |
|
||||
}, |
|
||||
"Lockout": { |
|
||||
"AllowedForNewUsers": false, |
|
||||
"LockoutDuration": 5, |
|
||||
"MaxFailedAccessAttempts": 5 |
|
||||
}, |
|
||||
"SignIn": { |
|
||||
"RequireConfirmedEmail": false, |
|
||||
"RequireConfirmedPhoneNumber": false |
|
||||
} |
|
||||
}, |
|
||||
"FeatureManagement": { |
|
||||
"IsDynamicStoreEnabled": true |
|
||||
}, |
|
||||
"SettingManagement": { |
|
||||
"IsDynamicStoreEnabled": true |
|
||||
}, |
|
||||
"PermissionManagement": { |
|
||||
"IsDynamicStoreEnabled": true |
|
||||
}, |
|
||||
"TextTemplating": { |
|
||||
"IsDynamicStoreEnabled": true |
|
||||
}, |
|
||||
"WebhooksManagement": { |
|
||||
"IsDynamicStoreEnabled": true |
|
||||
}, |
|
||||
"Logging": { |
|
||||
"Serilog": { |
|
||||
"Elasticsearch": { |
|
||||
"IndexFormat": "abp.dev.logging-{0:yyyy.MM.dd}" |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
"AuditLogging": { |
|
||||
"Elasticsearch": { |
|
||||
"IndexPrefix": "abp.dev.auditing" |
|
||||
} |
|
||||
}, |
|
||||
"Elasticsearch": { |
|
||||
"NodeUris": "http://127.0.0.1:9200" |
|
||||
}, |
|
||||
"Minio": { |
|
||||
"WithSSL": false, |
|
||||
"BucketName": "blobs", |
|
||||
"EndPoint": "127.0.0.1:19000", |
|
||||
"AccessKey": "ZD43kNpimiJf9mCuomTP", |
|
||||
"SecretKey": "w8IqMgi4Tnz0DGzN8jZ7IJWq7OEdbUnAU0jlZxQK", |
|
||||
"CreateBucketIfNotExists": false |
|
||||
}, |
|
||||
"Serilog": { |
|
||||
"MinimumLevel": { |
|
||||
"Default": "Information", |
|
||||
"Override": { |
|
||||
"System": "Warning", |
|
||||
"Microsoft": "Warning", |
|
||||
"DotNetCore": "Warning" |
|
||||
} |
|
||||
}, |
|
||||
"WriteTo": [ |
|
||||
{ |
|
||||
"Name": "Console", |
|
||||
"Args": { |
|
||||
"restrictedToMinimumLevel": "Debug", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "Elasticsearch", |
|
||||
"Args": { |
|
||||
"nodeUris": "http://127.0.0.1:9200", |
|
||||
"indexFormat": "abp.dev.logging-{0:yyyy.MM.dd}", |
|
||||
"autoRegisterTemplate": true, |
|
||||
"autoRegisterTemplateVersion": "ESv7" |
|
||||
} |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
@ -1,89 +0,0 @@ |
|||||
{ |
|
||||
"Clock": { |
|
||||
"Kind": "Local" |
|
||||
}, |
|
||||
"Forwarded": { |
|
||||
"ForwardedHeaders": "XForwardedFor,XForwardedProto" |
|
||||
}, |
|
||||
"StringEncryption": { |
|
||||
"DefaultPassPhrase": "s46c5q55nxpeS8Ra", |
|
||||
"InitVectorBytes": "s83ng0abvd02js84", |
|
||||
"DefaultSalt": "sf&5)s3#" |
|
||||
}, |
|
||||
"Json": { |
|
||||
"OutputDateTimeFormat": "yyyy-MM-dd HH:mm:ss", |
|
||||
"InputDateTimeFormats": [ |
|
||||
"yyyy-MM-dd HH:mm:ss", |
|
||||
"yyyy-MM-ddTHH:mm:ss" |
|
||||
] |
|
||||
}, |
|
||||
"AllowedHosts": "*", |
|
||||
"Hosting": { |
|
||||
"BasePath": "" |
|
||||
}, |
|
||||
"Serilog": { |
|
||||
"MinimumLevel": { |
|
||||
"Default": "Information", |
|
||||
"Override": { |
|
||||
"System": "Warning", |
|
||||
"Microsoft": "Warning", |
|
||||
"DotNetCore": "Information" |
|
||||
} |
|
||||
}, |
|
||||
"Enrich": [ "FromLogContext", "WithProcessId", "WithThreadId", "WithEnvironmentName", "WithMachineName", "WithApplicationName", "WithUniqueId" ], |
|
||||
"WriteTo": [ |
|
||||
{ |
|
||||
"Name": "Console", |
|
||||
"Args": { |
|
||||
"restrictedToMinimumLevel": "Debug", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Debug-.log", |
|
||||
"restrictedToMinimumLevel": "Debug", |
|
||||
"rollingInterval": "Day", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Info-.log", |
|
||||
"restrictedToMinimumLevel": "Information", |
|
||||
"rollingInterval": "Day", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Warn-.log", |
|
||||
"restrictedToMinimumLevel": "Warning", |
|
||||
"rollingInterval": "Day", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Error-.log", |
|
||||
"restrictedToMinimumLevel": "Error", |
|
||||
"rollingInterval": "Day", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Fatal-.log", |
|
||||
"restrictedToMinimumLevel": "Fatal", |
|
||||
"rollingInterval": "Day", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
@ -1,10 +0,0 @@ |
|||||
"use strict"; |
|
||||
|
|
||||
var gulp = require("gulp"), |
|
||||
path = require('path'), |
|
||||
copyResources = require('./node_modules/@abp/aspnetcore.mvc.ui/gulp/copy-resources.js'); |
|
||||
|
|
||||
exports.default = function(done){ |
|
||||
copyResources(path.resolve('./')); |
|
||||
done(); |
|
||||
}; |
|
||||
@ -1,53 +0,0 @@ |
|||||
using Microsoft.Extensions.Configuration; |
|
||||
using Microsoft.Extensions.DependencyInjection; |
|
||||
using Microsoft.Extensions.Hosting; |
|
||||
using PackageName.CompanyName.ProjectName.EntityFrameworkCore; |
|
||||
using Serilog; |
|
||||
using Volo.Abp; |
|
||||
using Volo.Abp.Data; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.DbMigrator; |
|
||||
|
|
||||
public class DbMigratorHostedService : IHostedService |
|
||||
{ |
|
||||
private readonly IHostApplicationLifetime _hostApplicationLifetime; |
|
||||
private readonly IConfiguration _configuration; |
|
||||
|
|
||||
public DbMigratorHostedService( |
|
||||
IHostApplicationLifetime hostApplicationLifetime, |
|
||||
IConfiguration configuration) |
|
||||
{ |
|
||||
_hostApplicationLifetime = hostApplicationLifetime; |
|
||||
_configuration = configuration; |
|
||||
} |
|
||||
|
|
||||
public async Task StartAsync(CancellationToken cancellationToken) |
|
||||
{ |
|
||||
using var application = await AbpApplicationFactory |
|
||||
.CreateAsync<PackageNameCompanyNameProjectNameDbMigratorModule>(options => |
|
||||
{ |
|
||||
options.Configuration.UserSecretsId = Environment.GetEnvironmentVariable("APPLICATION_USER_SECRETS_ID"); |
|
||||
options.Configuration.UserSecretsAssembly = typeof(DbMigratorHostedService).Assembly; |
|
||||
options.Services.ReplaceConfiguration(_configuration); |
|
||||
options.UseAutofac(); |
|
||||
options.Services.AddLogging(c => c.AddSerilog()); |
|
||||
options.AddDataMigrationEnvironment(); |
|
||||
}); |
|
||||
await application.InitializeAsync(); |
|
||||
|
|
||||
await application |
|
||||
.ServiceProvider |
|
||||
.GetRequiredService<ProjectNameDbMigrationService>() |
|
||||
.CheckAndApplyDatabaseMigrationsAsync(); |
|
||||
|
|
||||
await application.ShutdownAsync(); |
|
||||
|
|
||||
_hostApplicationLifetime.StopApplication(); |
|
||||
} |
|
||||
|
|
||||
public Task StopAsync(CancellationToken cancellationToken) |
|
||||
{ |
|
||||
return Task.CompletedTask; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
@ -1,3 +0,0 @@ |
|||||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> |
|
||||
<ConfigureAwait ContinueOnCapturedContext="false" /> |
|
||||
</Weavers> |
|
||||
@ -1,30 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> |
|
||||
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. --> |
|
||||
<xs:element name="Weavers"> |
|
||||
<xs:complexType> |
|
||||
<xs:all> |
|
||||
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1"> |
|
||||
<xs:complexType> |
|
||||
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" /> |
|
||||
</xs:complexType> |
|
||||
</xs:element> |
|
||||
</xs:all> |
|
||||
<xs:attribute name="VerifyAssembly" type="xs:boolean"> |
|
||||
<xs:annotation> |
|
||||
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation> |
|
||||
</xs:annotation> |
|
||||
</xs:attribute> |
|
||||
<xs:attribute name="VerifyIgnoreCodes" type="xs:string"> |
|
||||
<xs:annotation> |
|
||||
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation> |
|
||||
</xs:annotation> |
|
||||
</xs:attribute> |
|
||||
<xs:attribute name="GenerateXsd" type="xs:boolean"> |
|
||||
<xs:annotation> |
|
||||
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation> |
|
||||
</xs:annotation> |
|
||||
</xs:attribute> |
|
||||
</xs:complexType> |
|
||||
</xs:element> |
|
||||
</xs:schema> |
|
||||
@ -1,42 +0,0 @@ |
|||||
<Project Sdk="Microsoft.NET.Sdk"> |
|
||||
|
|
||||
<Import Project="../../common.props" /> |
|
||||
<Import Project="../../configureawait.props" /> |
|
||||
|
|
||||
<PropertyGroup> |
|
||||
<OutputType>Exe</OutputType> |
|
||||
<TargetFramework>net8.0</TargetFramework> |
|
||||
<ImplicitUsings>enable</ImplicitUsings> |
|
||||
<Nullable>enable</Nullable> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<PackageReference Include="Serilog.Extensions.Logging" /> |
|
||||
<PackageReference Include="Serilog.Sinks.File" /> |
|
||||
<PackageReference Include="Serilog.Sinks.Console" /> |
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" /> |
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools"> |
|
||||
<PrivateAssets>all</PrivateAssets> |
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> |
|
||||
</PackageReference> |
|
||||
<PackageReference Include="Volo.Abp.Autofac" /> |
|
||||
<PackageReference Include="Volo.Abp.EntityFrameworkCore.MySql" Condition="'$(MySQL)'=='true'" /> |
|
||||
<PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Condition="'$(SqlServer)'=='true'" /> |
|
||||
<PackageReference Include="Volo.Abp.EntityFrameworkCore.Sqlite" Condition="'$(Sqlite)'=='true'" /> |
|
||||
<PackageReference Include="Volo.Abp.EntityFrameworkCore.Oracle" Condition="'$(Oracle)'=='true'" /> |
|
||||
<PackageReference Include="Volo.Abp.EntityFrameworkCore.Oracle.Devart" Condition="'$(OracleDevart)'=='true'" /> |
|
||||
<PackageReference Include="Volo.Abp.EntityFrameworkCore.PostgreSql" Condition="'$(PostgreSql)'=='true'" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<Compile Remove="Logs\**" /> |
|
||||
<Content Remove="Logs\**" /> |
|
||||
<EmbeddedResource Remove="Logs\**" /> |
|
||||
<None Remove="Logs\**" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<ProjectReference Include="..\..\src\PackageName.CompanyName.ProjectName.EntityFrameworkCore\PackageName.CompanyName.ProjectName.EntityFrameworkCore.csproj" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
</Project> |
|
||||
@ -1,13 +0,0 @@ |
|||||
using PackageName.CompanyName.ProjectName.EntityFrameworkCore; |
|
||||
using Volo.Abp.Autofac; |
|
||||
using Volo.Abp.Modularity; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.DbMigrator; |
|
||||
|
|
||||
[DependsOn( |
|
||||
typeof(AbpAutofacModule), |
|
||||
typeof(ProjectNameEntityFrameworkCoreModule) |
|
||||
)] |
|
||||
public class PackageNameCompanyNameProjectNameDbMigratorModule : AbpModule |
|
||||
{ |
|
||||
} |
|
||||
@ -1,40 +0,0 @@ |
|||||
using Microsoft.Extensions.DependencyInjection; |
|
||||
using Microsoft.Extensions.Hosting; |
|
||||
using Microsoft.Extensions.Logging; |
|
||||
using Serilog; |
|
||||
using Serilog.Events; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.DbMigrator; |
|
||||
|
|
||||
public class Program |
|
||||
{ |
|
||||
public async static Task Main(string[] args) |
|
||||
{ |
|
||||
Log.Logger = new LoggerConfiguration() |
|
||||
.MinimumLevel.Information() |
|
||||
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning) |
|
||||
.MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning) |
|
||||
#if DEBUG
|
|
||||
.MinimumLevel.Override("PackageName.CompanyName.ProjectName", LogEventLevel.Debug) |
|
||||
#else
|
|
||||
.MinimumLevel.Override("PackageName.CompanyName.ProjectName", LogEventLevel.Information) |
|
||||
#endif
|
|
||||
.Enrich.FromLogContext() |
|
||||
.WriteTo.File("Logs/logs.txt") |
|
||||
.WriteTo.Console() |
|
||||
.CreateLogger(); |
|
||||
|
|
||||
await CreateHostBuilder(args).RunConsoleAsync(); |
|
||||
} |
|
||||
|
|
||||
public static IHostBuilder CreateHostBuilder(string[] args) |
|
||||
{ |
|
||||
return Host.CreateDefaultBuilder(args) |
|
||||
.AddAppSettingsSecretsJson() |
|
||||
.ConfigureLogging((context, logging) => logging.ClearProviders()) |
|
||||
.ConfigureServices((hostContext, services) => |
|
||||
{ |
|
||||
services.AddHostedService<DbMigratorHostedService>(); |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
@ -1,147 +0,0 @@ |
|||||
{ |
|
||||
"AgileConfig": { |
|
||||
"IsEnabled": false, |
|
||||
"env": "DEV", |
|
||||
"appId": "PackageName.CompanyName.ProjectName", |
|
||||
"secret": "1q2w3E*", |
|
||||
"nodes": "http://127.0.0.1:15000", |
|
||||
"name": "PackageName.CompanyName.ProjectName", |
|
||||
"tag": "PackageName.CompanyName.ProjectName" |
|
||||
}, |
|
||||
"Auditing": { |
|
||||
"AllEntitiesSelector": true |
|
||||
}, |
|
||||
"DistributedCache": { |
|
||||
"HideErrors": true, |
|
||||
"KeyPrefix": "LINGYUN.Abp.Application", |
|
||||
"GlobalCacheEntryOptions": { |
|
||||
"SlidingExpiration": "30:00:00", |
|
||||
"AbsoluteExpirationRelativeToNow": "60:00:00" |
|
||||
} |
|
||||
}, |
|
||||
"ConnectionStrings": { |
|
||||
"Default": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456", |
|
||||
"ProjectName": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456", |
|
||||
"AbpSaas": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456", |
|
||||
"AbpFeatureManagement": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456", |
|
||||
"AbpPermissionManagement": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456", |
|
||||
"AbpSettingManagement": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456", |
|
||||
"AbpLocalizationManagement": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456", |
|
||||
"AbpTextTemplating": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456" |
|
||||
}, |
|
||||
"DistributedLock": { |
|
||||
"IsEnabled": true, |
|
||||
"Redis": { |
|
||||
"Configuration": "127.0.0.1,defaultDatabase=15" |
|
||||
} |
|
||||
}, |
|
||||
"OpenTelemetry": { |
|
||||
"IsEnabled": true, |
|
||||
"ZipKin": { |
|
||||
"Endpoint": "http://127.0.0.1:9411/api/v2/spans" |
|
||||
} |
|
||||
}, |
|
||||
"RemoteServices": {}, |
|
||||
"IdentityClients": { |
|
||||
"InternalServiceClient": { |
|
||||
"Authority": "http://127.0.0.1:44385", |
|
||||
"RequireHttps": false, |
|
||||
"GrantType": "client_credentials", |
|
||||
"Scope": "lingyun-abp-application", |
|
||||
"ClientId": "InternalServiceClient", |
|
||||
"ClientSecret": "1q2w3E*" |
|
||||
} |
|
||||
}, |
|
||||
"CAP": { |
|
||||
"EventBus": { |
|
||||
"DefaultGroupName": "ProjectName", |
|
||||
"GroupNamePrefix": "Dev", |
|
||||
"Version": "v1", |
|
||||
"FailedRetryInterval": 300, |
|
||||
"FailedRetryCount": 10 |
|
||||
}, |
|
||||
"MySql": { |
|
||||
"TableNamePrefix": "ProjectName_cap", |
|
||||
"ConnectionString": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456" |
|
||||
}, |
|
||||
"SqlServer": { |
|
||||
"TableNamePrefix": "ProjectName_cap", |
|
||||
"ConnectionString": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456" |
|
||||
}, |
|
||||
"Sqlite": { |
|
||||
"TableNamePrefix": "ProjectName_cap", |
|
||||
"ConnectionString": "Data Source=./cap.db" |
|
||||
}, |
|
||||
"Oracle": { |
|
||||
"TableNamePrefix": "ProjectName_cap", |
|
||||
"ConnectionString": "Data Source=ProjectName;Integrated Security=yes;" |
|
||||
}, |
|
||||
"PostgreSql": { |
|
||||
"TableNamePrefix": "ProjectName_cap", |
|
||||
"ConnectionString": "Host=localhost;Port=5432;Database=ProjectName;User ID=root;Password=123456;" |
|
||||
}, |
|
||||
"RabbitMQ": { |
|
||||
"HostName": "127.0.0.1", |
|
||||
"Port": 5672, |
|
||||
"UserName": "admin", |
|
||||
"Password": "123456", |
|
||||
"ExchangeName": "LINGYUN.Abp.Application", |
|
||||
"VirtualHost": "/" |
|
||||
} |
|
||||
}, |
|
||||
"Redis": { |
|
||||
"Configuration": "127.0.0.1,defaultDatabase=10", |
|
||||
"InstanceName": "LINGYUN.Abp.Application" |
|
||||
}, |
|
||||
"AuthServer": { |
|
||||
"Authority": "http://127.0.0.1:44385/", |
|
||||
"Audience": "lingyun-abp-application", |
|
||||
"MapInboundClaims": false, |
|
||||
"RequireHttpsMetadata": false, |
|
||||
"SwaggerClientId": "InternalServiceClient", |
|
||||
"SwaggerClientSecret": "1q2w3E*" |
|
||||
}, |
|
||||
"Logging": { |
|
||||
"Serilog": { |
|
||||
"Elasticsearch": { |
|
||||
"IndexFormat": "abp.dev.logging-{0:yyyy.MM.dd}" |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
"AuditLogging": { |
|
||||
"Elasticsearch": { |
|
||||
"IndexPrefix": "abp.dev.auditing" |
|
||||
} |
|
||||
}, |
|
||||
"Elasticsearch": { |
|
||||
"NodeUris": "http://127.0.0.1:9200" |
|
||||
}, |
|
||||
"Serilog": { |
|
||||
"MinimumLevel": { |
|
||||
"Default": "Debug", |
|
||||
"Override": { |
|
||||
"System": "Warning", |
|
||||
"Microsoft": "Warning", |
|
||||
"DotNetCore": "Debug" |
|
||||
} |
|
||||
}, |
|
||||
"WriteTo": [ |
|
||||
{ |
|
||||
"Name": "Console", |
|
||||
"Args": { |
|
||||
"restrictedToMinimumLevel": "Debug", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "Elasticsearch", |
|
||||
"Args": { |
|
||||
"nodeUris": "http://127.0.0.1:9200", |
|
||||
"indexFormat": "abp.dev.logging-{0:yyyy.MM.dd}", |
|
||||
"autoRegisterTemplate": true, |
|
||||
"autoRegisterTemplateVersion": "ESv7" |
|
||||
} |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
@ -1,80 +0,0 @@ |
|||||
{ |
|
||||
"StringEncryption": { |
|
||||
"DefaultPassPhrase": "s46c5q55nxpeS8Ra", |
|
||||
"InitVectorBytes": "s83ng0abvd02js84", |
|
||||
"DefaultSalt": "sf&5)s3#" |
|
||||
}, |
|
||||
"AllowedHosts": "*", |
|
||||
"Serilog": { |
|
||||
"MinimumLevel": { |
|
||||
"Default": "Debug", |
|
||||
"Override": { |
|
||||
"Microsoft.EntityFrameworkCore": "Debug", |
|
||||
"System": "Information", |
|
||||
"Microsoft": "Information" |
|
||||
} |
|
||||
}, |
|
||||
"Enrich": [ "FromLogContext", "WithProcessId", "WithThreadId", "WithEnvironmentName", "WithMachineName", "WithApplicationName", "WithUniqueId" ], |
|
||||
"WriteTo": [ |
|
||||
{ |
|
||||
"Name": "Console", |
|
||||
"Args": { |
|
||||
"initialMinimumLevel": "Verbose", |
|
||||
"standardErrorFromLevel": "Verbose", |
|
||||
"restrictedToMinimumLevel": "Verbose", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Debug-.log", |
|
||||
"restrictedToMinimumLevel": "Debug", |
|
||||
"rollingInterval": "Day", |
|
||||
"fileSizeLimitBytes": 5242880, |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Info-.log", |
|
||||
"restrictedToMinimumLevel": "Information", |
|
||||
"rollingInterval": "Day", |
|
||||
"fileSizeLimitBytes": 5242880, |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Warn-.log", |
|
||||
"restrictedToMinimumLevel": "Warning", |
|
||||
"rollingInterval": "Day", |
|
||||
"fileSizeLimitBytes": 5242880, |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Error-.log", |
|
||||
"restrictedToMinimumLevel": "Error", |
|
||||
"rollingInterval": "Day", |
|
||||
"fileSizeLimitBytes": 5242880, |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Fatal-.log", |
|
||||
"restrictedToMinimumLevel": "Fatal", |
|
||||
"rollingInterval": "Day", |
|
||||
"fileSizeLimitBytes": 5242880, |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
@ -1,12 +0,0 @@ |
|||||
using Microsoft.AspNetCore.Mvc; |
|
||||
using Volo.Abp.AspNetCore.Mvc; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.Controllers; |
|
||||
|
|
||||
public class HomeController : AbpController |
|
||||
{ |
|
||||
public IActionResult Index() |
|
||||
{ |
|
||||
return Redirect("/swagger/index.html"); |
|
||||
} |
|
||||
} |
|
||||
@ -1,57 +0,0 @@ |
|||||
FROM mcr.microsoft.com/dotnet/aspnet:8.0 |
|
||||
LABEL maintainer="colin.in@foxmail.com" |
|
||||
WORKDIR /app |
|
||||
|
|
||||
COPY . /app |
|
||||
|
|
||||
## 设置服务器时区. |
|
||||
## 建议在外部(如docker-compose.yml)中定义 |
|
||||
## Set server time zone. |
|
||||
## Suggest defining it externally (such as Docker Compose. yml) |
|
||||
#ENV TZ=Asia/Shanghai |
|
||||
#RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone |
|
||||
|
|
||||
|
|
||||
## 解决连接SqlServer TLS版本过高问题. |
|
||||
## 如果数据提供者是SqlServer, 且兼容性版本在120及以下,需要手动取消注释. |
|
||||
## The version of connection SqlServer TLS is too high. |
|
||||
## If the data provider is SqlServer and the compatibility version is 120 and below, manual annotation needs to be cancelled. |
|
||||
|
|
||||
#RUN sed -i 's/\[openssl_init\]/# \[openssl_init\]/g' /etc/ssl/openssl.cnf |
|
||||
#RUN sed -i '$a\[openssl_init]' /etc/ssl/openssl.cnf |
|
||||
#RUN sed -i '$a\providers = provider_sect' /etc/ssl/openssl.cnf |
|
||||
#RUN sed -i '$a\ssl_conf = ssl_sect' /etc/ssl/openssl.cnf |
|
||||
# |
|
||||
#RUN sed -i '$a\[provider_sect]' /etc/ssl/openssl.cnf |
|
||||
#RUN sed -i '$a\default = default_sect' /etc/ssl/openssl.cnf |
|
||||
#RUN sed -i '$a\legacy = legacy_sect' /etc/ssl/openssl.cnf |
|
||||
# |
|
||||
#RUN sed -i '$a\[default_sect]' /etc/ssl/openssl.cnf |
|
||||
#RUN sed -i '$a\activate = 1' /etc/ssl/openssl.cnf |
|
||||
# |
|
||||
#RUN sed -i '$a\[legacy_sect]' /etc/ssl/openssl.cnf |
|
||||
#RUN sed -i '$a\activate = 1' /etc/ssl/openssl.cnf |
|
||||
# |
|
||||
#RUN sed -i '$a\[ssl_sect]' /etc/ssl/openssl.cnf |
|
||||
#RUN sed -i '$a\system_default = system_default_sect' /etc/ssl/openssl.cnf |
|
||||
# |
|
||||
#RUN sed -i '$a\[system_default_sect]' /etc/ssl/openssl.cnf |
|
||||
#RUN sed -i '$a\CipherString = DEFAULT:@SECLEVEL=0' /etc/ssl/openssl.cnf |
|
||||
|
|
||||
## 阿里源 |
|
||||
#RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list.d/debian.sources |
|
||||
#RUN apt-get clean |
|
||||
#RUN apt-get update |
|
||||
|
|
||||
## .NET 8.0 默认使用8080端口,变更为80端口需要环境变量ASPNETCORE_HTTP_PORTS=80 |
|
||||
## .NET 8.0 defaults to port 8080, changing to port 80 requires the environment variable ASPNETCORE.HTTP-PORTS=80 |
|
||||
# EXPOSE 8080/tcp |
|
||||
EXPOSE 80/tcp |
|
||||
|
|
||||
VOLUME [ "./app/Logs" ] |
|
||||
VOLUME [ "./app/Modules" ] |
|
||||
|
|
||||
RUN apt update |
|
||||
RUN apt install wget -y |
|
||||
|
|
||||
ENTRYPOINT ["dotnet", "PackageName.CompanyName.ProjectName.HttpApi.Host.dll"] |
|
||||
@ -1,76 +0,0 @@ |
|||||
<Project Sdk="Microsoft.NET.Sdk.Web"> |
|
||||
|
|
||||
<PropertyGroup> |
|
||||
<TargetFramework>net8.0</TargetFramework> |
|
||||
<RootNamespace>PackageName.CompanyName.ProjectName</RootNamespace> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<PackageReference Include="AgileConfig.Client" /> |
|
||||
<PackageReference Include="DotNetCore.CAP.Dashboard" /> |
|
||||
<PackageReference Include="DotNetCore.CAP.MySql" Condition="'$(MySQL)'=='true'" /> |
|
||||
<PackageReference Include="DotNetCore.CAP.SqlServer" Condition="'$(SqlServer)'=='true'" /> |
|
||||
<PackageReference Include="DotNetCore.CAP.Oracle" Condition="'$(Oracle)'=='true'" /> |
|
||||
<PackageReference Include="DotNetCore.CAP.Oracle" Condition="'$(OracleDevart)'=='true'" /> |
|
||||
<PackageReference Include="DotNetCore.CAP.PostgreSql" Condition="'$(PostgreSql)'=='true'" /> |
|
||||
<PackageReference Include="DotNetCore.CAP.Sqlite" Condition="'$(Sqlite)'=='true'" /> |
|
||||
<PackageReference Include="DotNetCore.CAP.RabbitMQ" /> |
|
||||
<PackageReference Include="DotNetCore.CAP.OpenTelemetry" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.AspNetCore.HttpOverrides" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.AspNetCore.Mvc.Localization" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.AspNetCore.Mvc.Wrapper" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.AuditLogging.Elasticsearch" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Data.DbMigrator" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Dapr.Client.Wrapper" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.EventBus.CAP" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.ExceptionHandling.Emailing" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Localization.CultureMap" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Identity.Session.AspNetCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Saas.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Serilog.Enrichers.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Serilog.Enrichers.UniqueId" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.TextTemplating.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools"> |
|
||||
<PrivateAssets>all</PrivateAssets> |
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> |
|
||||
</PackageReference> |
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" /> |
|
||||
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" /> |
|
||||
<PackageReference Include="DistributedLock.Redis" /> |
|
||||
<PackageReference Include="OpenTelemetry.Extensions.Hosting" /> |
|
||||
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" /> |
|
||||
<PackageReference Include="OpenTelemetry.Exporter.Zipkin" /> |
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" /> |
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.Http" /> |
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" /> |
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="Serilog.AspNetCore" /> |
|
||||
<PackageReference Include="Serilog.Enrichers.Environment" /> |
|
||||
<PackageReference Include="Serilog.Enrichers.Assembly" /> |
|
||||
<PackageReference Include="Serilog.Enrichers.Process" /> |
|
||||
<PackageReference Include="Serilog.Enrichers.Thread" /> |
|
||||
<PackageReference Include="Serilog.Settings.Configuration" /> |
|
||||
<PackageReference Include="Serilog.Sinks.Elasticsearch" /> |
|
||||
<PackageReference Include="Serilog.Sinks.File" /> |
|
||||
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" /> |
|
||||
<PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" /> |
|
||||
<PackageReference Include="Volo.Abp.AspNetCore.MultiTenancy" /> |
|
||||
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" /> |
|
||||
<PackageReference Include="Volo.Abp.Autofac" /> |
|
||||
<PackageReference Include="Volo.Abp.DistributedLocking" /> |
|
||||
<PackageReference Include="Volo.Abp.Swashbuckle" /> |
|
||||
<PackageReference Include="Volo.Abp.Http.Client.IdentityModel.Web" /> |
|
||||
<PackageReference Include="Volo.Abp.FeatureManagement.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" /> |
|
||||
<PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<ProjectReference Include="..\..\src\PackageName.CompanyName.ProjectName.Application\PackageName.CompanyName.ProjectName.Application.csproj" /> |
|
||||
<ProjectReference Include="..\..\src\PackageName.CompanyName.ProjectName.EntityFrameworkCore\PackageName.CompanyName.ProjectName.EntityFrameworkCore.csproj" /> |
|
||||
<ProjectReference Include="..\..\src\PackageName.CompanyName.ProjectName.HttpApi\PackageName.CompanyName.ProjectName.HttpApi.csproj" /> |
|
||||
<ProjectReference Include="..\..\src\PackageName.CompanyName.ProjectName.SettingManagement\PackageName.CompanyName.ProjectName.SettingManagement.csproj" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
</Project> |
|
||||
@ -1,65 +0,0 @@ |
|||||
using Microsoft.AspNetCore.Builder; |
|
||||
using Microsoft.AspNetCore.Hosting; |
|
||||
using Microsoft.Extensions.Configuration; |
|
||||
using Microsoft.Extensions.DependencyInjection; |
|
||||
using Microsoft.Extensions.Hosting; |
|
||||
using Serilog; |
|
||||
using System; |
|
||||
using System.IO; |
|
||||
using System.Linq; |
|
||||
using System.Threading.Tasks; |
|
||||
using Volo.Abp.IO; |
|
||||
using Volo.Abp.Modularity.PlugIns; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName; |
|
||||
|
|
||||
public class Program |
|
||||
{ |
|
||||
public async static Task<int> Main(string[] args) |
|
||||
{ |
|
||||
try |
|
||||
{ |
|
||||
Console.Title = "Web.Host"; |
|
||||
Log.Information("Starting web host."); |
|
||||
|
|
||||
var builder = WebApplication.CreateBuilder(args); |
|
||||
builder.Host.AddAppSettingsSecretsJson() |
|
||||
.UseAutofac() |
|
||||
.ConfigureAppConfiguration((context, config) => |
|
||||
{ |
|
||||
var configuration = config.Build(); |
|
||||
var agileConfigEnabled = configuration["AgileConfig:IsEnabled"]; |
|
||||
if (agileConfigEnabled.IsNullOrEmpty() || bool.Parse(agileConfigEnabled)) |
|
||||
{ |
|
||||
config.AddAgileConfig(new AgileConfig.Client.ConfigClient(configuration)); |
|
||||
} |
|
||||
}) |
|
||||
.UseSerilog((context, provider, config) => |
|
||||
{ |
|
||||
config.ReadFrom.Configuration(context.Configuration); |
|
||||
}); |
|
||||
await builder.AddApplicationAsync<ProjectNameHttpApiHostModule>(options => |
|
||||
{ |
|
||||
ProjectNameHttpApiHostModule.ApplicationName = Environment.GetEnvironmentVariable("APPLICATION_NAME") |
|
||||
?? ProjectNameHttpApiHostModule.ApplicationName; |
|
||||
options.ApplicationName = ProjectNameHttpApiHostModule.ApplicationName; |
|
||||
// 搜索 Modules 目录下所有文件作为插件
|
|
||||
// 取消显示引用所有其他项目的模块,改为通过插件的形式引用
|
|
||||
var pluginFolder = Path.Combine( |
|
||||
Directory.GetCurrentDirectory(), "Modules"); |
|
||||
DirectoryHelper.CreateIfNotExists(pluginFolder); |
|
||||
options.PlugInSources.AddFolder( |
|
||||
pluginFolder, |
|
||||
SearchOption.AllDirectories); |
|
||||
}); |
|
||||
var app = builder.Build(); |
|
||||
await app.InitializeApplicationAsync(); |
|
||||
await app.RunAsync(); |
|
||||
return 0; |
|
||||
} |
|
||||
finally |
|
||||
{ |
|
||||
Log.CloseAndFlush(); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,445 +0,0 @@ |
|||||
using DotNetCore.CAP; |
|
||||
using LINGYUN.Abp.Dapr.Client.ClientProxying; |
|
||||
using LINGYUN.Abp.Dapr.Client.DynamicProxying; |
|
||||
using LINGYUN.Abp.ExceptionHandling; |
|
||||
using LINGYUN.Abp.ExceptionHandling.Emailing; |
|
||||
using LINGYUN.Abp.Localization.CultureMap; |
|
||||
using LINGYUN.Abp.Localization.Persistence; |
|
||||
using LINGYUN.Abp.Serilog.Enrichers.Application; |
|
||||
using LINGYUN.Abp.Serilog.Enrichers.UniqueId; |
|
||||
using LINGYUN.Abp.Wrapper; |
|
||||
using Medallion.Threading; |
|
||||
using Medallion.Threading.Redis; |
|
||||
using Microsoft.AspNetCore.Authentication.JwtBearer; |
|
||||
using Microsoft.AspNetCore.Builder; |
|
||||
using Microsoft.AspNetCore.Cors; |
|
||||
using Microsoft.AspNetCore.DataProtection; |
|
||||
using Microsoft.AspNetCore.Routing; |
|
||||
using Microsoft.Extensions.Caching.StackExchangeRedis; |
|
||||
using Microsoft.Extensions.Configuration; |
|
||||
using Microsoft.Extensions.DependencyInjection; |
|
||||
using Microsoft.Extensions.Options; |
|
||||
using Microsoft.OpenApi.Models; |
|
||||
using OpenTelemetry.Metrics; |
|
||||
using OpenTelemetry.Resources; |
|
||||
using OpenTelemetry.Trace; |
|
||||
using PackageName.CompanyName.ProjectName.Localization; |
|
||||
using StackExchange.Redis; |
|
||||
using System; |
|
||||
using System.Collections.Generic; |
|
||||
using System.Linq; |
|
||||
using System.Text.Encodings.Web; |
|
||||
using System.Text.Unicode; |
|
||||
using Volo.Abp; |
|
||||
using Volo.Abp.AspNetCore.Mvc; |
|
||||
using Volo.Abp.AspNetCore.Mvc.AntiForgery; |
|
||||
using Volo.Abp.Auditing; |
|
||||
using Volo.Abp.Caching; |
|
||||
using Volo.Abp.EntityFrameworkCore; |
|
||||
using Volo.Abp.GlobalFeatures; |
|
||||
using Volo.Abp.Http.Client; |
|
||||
using Volo.Abp.Json; |
|
||||
using Volo.Abp.Json.SystemTextJson; |
|
||||
using Volo.Abp.Localization; |
|
||||
using Volo.Abp.MultiTenancy; |
|
||||
using Volo.Abp.Security.Claims; |
|
||||
using Volo.Abp.Threading; |
|
||||
using Volo.Abp.VirtualFileSystem; |
|
||||
using static IdentityModel.ClaimComparer; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName; |
|
||||
|
|
||||
public partial class ProjectNameHttpApiHostModule |
|
||||
{ |
|
||||
public static string ApplicationName { get; set; } = "ProjectNameService"; |
|
||||
private const string DefaultCorsPolicyName = "Default"; |
|
||||
private static readonly OneTimeRunner OneTimeRunner = new(); |
|
||||
|
|
||||
private void PreConfigureFeature() |
|
||||
{ |
|
||||
OneTimeRunner.Run(() => |
|
||||
{ |
|
||||
GlobalFeatureManager.Instance.Modules.Editions().EnableAll(); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void PreConfigureApp() |
|
||||
{ |
|
||||
AbpSerilogEnrichersConsts.ApplicationName = ApplicationName; |
|
||||
|
|
||||
PreConfigure<AbpSerilogEnrichersUniqueIdOptions>(options => |
|
||||
{ |
|
||||
// 以开放端口区别
|
|
||||
options.SnowflakeIdOptions.WorkerId = 5; |
|
||||
options.SnowflakeIdOptions.WorkerIdBits = 5; |
|
||||
options.SnowflakeIdOptions.DatacenterId = 1; |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void PreConfigureCAP(IConfiguration configuration) |
|
||||
{ |
|
||||
PreConfigure<CapOptions>(options => |
|
||||
{ |
|
||||
options |
|
||||
#if MySQL
|
|
||||
.UseMySql(sqlOptions => |
|
||||
{ |
|
||||
configuration.GetSection("CAP:MySql").Bind(sqlOptions); |
|
||||
}) |
|
||||
#elif SqlServer
|
|
||||
.UseSqlServer(sqlOptions => |
|
||||
{ |
|
||||
configuration.GetSection("CAP:SqlServer").Bind(sqlOptions); |
|
||||
}) |
|
||||
#elif Sqlite
|
|
||||
.UseSqlite(sqlOptions => |
|
||||
{ |
|
||||
configuration.GetSection("CAP:Sqlite").Bind(sqlOptions); |
|
||||
}) |
|
||||
#elif Oracle || OracleDevart
|
|
||||
.UseOracle(sqlOptions => |
|
||||
{ |
|
||||
configuration.GetSection("CAP:Oracle").Bind(sqlOptions); |
|
||||
}) |
|
||||
#elif PostgreSql
|
|
||||
.UsePostgreSql(sqlOptions => |
|
||||
{ |
|
||||
configuration.GetSection("CAP:PostgreSql").Bind(sqlOptions); |
|
||||
}) |
|
||||
#endif
|
|
||||
.UseRabbitMQ(rabbitMQOptions => |
|
||||
{ |
|
||||
configuration.GetSection("CAP:RabbitMQ").Bind(rabbitMQOptions); |
|
||||
}) |
|
||||
.UseDashboard(); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureJsonSerializer(IConfiguration configuration) |
|
||||
{ |
|
||||
// 统一时间日期格式
|
|
||||
Configure<AbpJsonOptions>(options => |
|
||||
{ |
|
||||
var jsonConfiguration = configuration.GetSection("Json"); |
|
||||
if (jsonConfiguration.Exists()) |
|
||||
{ |
|
||||
jsonConfiguration.Bind(options); |
|
||||
} |
|
||||
}); |
|
||||
// 中文序列化的编码问题
|
|
||||
Configure<AbpSystemTextJsonSerializerOptions>(options => |
|
||||
{ |
|
||||
options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureDistributedLock(IServiceCollection services, IConfiguration configuration) |
|
||||
{ |
|
||||
var distributedLockIsEnabled = configuration["DistributedLock:IsEnabled"]; |
|
||||
if (distributedLockIsEnabled.IsNullOrWhiteSpace() || bool.Parse(distributedLockIsEnabled)) |
|
||||
{ |
|
||||
var redis = ConnectionMultiplexer.Connect(configuration["DistributedLock:Redis:Configuration"]); |
|
||||
services.AddSingleton<IDistributedLockProvider>(_ => new RedisDistributedSynchronizationProvider(redis.GetDatabase())); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private void ConfigureOpenTelemetry(IServiceCollection services, IConfiguration configuration) |
|
||||
{ |
|
||||
var openTelemetryEnabled = configuration["OpenTelemetry:IsEnabled"]; |
|
||||
if (openTelemetryEnabled.IsNullOrEmpty() || bool.Parse(openTelemetryEnabled)) |
|
||||
{ |
|
||||
services.AddOpenTelemetry() |
|
||||
.ConfigureResource(resource => |
|
||||
{ |
|
||||
resource.AddService(ApplicationName); |
|
||||
}) |
|
||||
.WithTracing(tracing => |
|
||||
{ |
|
||||
tracing.AddHttpClientInstrumentation(); |
|
||||
tracing.AddAspNetCoreInstrumentation(); |
|
||||
tracing.AddCapInstrumentation(); |
|
||||
tracing.AddEntityFrameworkCoreInstrumentation(); |
|
||||
tracing.AddSource(ApplicationName); |
|
||||
|
|
||||
var tracingOtlpEndpoint = configuration["OpenTelemetry:Otlp:Endpoint"]; |
|
||||
if (!tracingOtlpEndpoint.IsNullOrWhiteSpace()) |
|
||||
{ |
|
||||
tracing.AddOtlpExporter(otlpOptions => |
|
||||
{ |
|
||||
otlpOptions.Endpoint = new Uri(tracingOtlpEndpoint); |
|
||||
}); |
|
||||
return; |
|
||||
} |
|
||||
|
|
||||
var zipkinEndpoint = configuration["OpenTelemetry:ZipKin:Endpoint"]; |
|
||||
if (!zipkinEndpoint.IsNullOrWhiteSpace()) |
|
||||
{ |
|
||||
tracing.AddZipkinExporter(zipKinOptions => |
|
||||
{ |
|
||||
zipKinOptions.Endpoint = new Uri(zipkinEndpoint); |
|
||||
}); |
|
||||
return; |
|
||||
} |
|
||||
}) |
|
||||
.WithMetrics(metrics => |
|
||||
{ |
|
||||
metrics.AddRuntimeInstrumentation(); |
|
||||
metrics.AddHttpClientInstrumentation(); |
|
||||
metrics.AddAspNetCoreInstrumentation(); |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private void ConfigureExceptionHandling() |
|
||||
{ |
|
||||
// 自定义需要处理的异常
|
|
||||
Configure<AbpExceptionHandlingOptions>(options => |
|
||||
{ |
|
||||
// 加入需要处理的异常类型
|
|
||||
options.Handlers.Add<Volo.Abp.Data.AbpDbConcurrencyException>(); |
|
||||
options.Handlers.Add<AbpInitializationException>(); |
|
||||
options.Handlers.Add<OutOfMemoryException>(); |
|
||||
options.Handlers.Add<System.Data.Common.DbException>(); |
|
||||
options.Handlers.Add<Microsoft.EntityFrameworkCore.DbUpdateException>(); |
|
||||
options.Handlers.Add<System.Data.DBConcurrencyException>(); |
|
||||
}); |
|
||||
// 自定义需要发送邮件通知的异常类型
|
|
||||
Configure<AbpEmailExceptionHandlingOptions>(options => |
|
||||
{ |
|
||||
// 是否发送堆栈信息
|
|
||||
options.SendStackTrace = true; |
|
||||
// 未指定异常接收者的默认接收邮件
|
|
||||
// 指定自己的邮件地址
|
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureIdentity(IConfiguration configuration) |
|
||||
{ |
|
||||
Configure<AbpClaimsPrincipalFactoryOptions>(options => |
|
||||
{ |
|
||||
options.IsDynamicClaimsEnabled = true; |
|
||||
var refreshClaimsUrl = configuration["App:RefreshClaimsUrl"]; |
|
||||
if (!refreshClaimsUrl.IsNullOrWhiteSpace()) |
|
||||
{ |
|
||||
options.RemoteRefreshUrl = refreshClaimsUrl + options.RemoteRefreshUrl; |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureAuditing(IConfiguration configuration) |
|
||||
{ |
|
||||
Configure<AbpAuditingOptions>(options => |
|
||||
{ |
|
||||
options.ApplicationName = ApplicationName; |
|
||||
// 是否启用实体变更记录
|
|
||||
var allEntitiesSelectorIsEnabled = configuration["Auditing:AllEntitiesSelector"]; |
|
||||
if (allEntitiesSelectorIsEnabled.IsNullOrWhiteSpace() || bool.Parse(allEntitiesSelectorIsEnabled)) |
|
||||
{ |
|
||||
options.EntityHistorySelectors.AddAllEntities(); |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureCaching(IConfiguration configuration) |
|
||||
{ |
|
||||
Configure<AbpDistributedCacheOptions>(options => |
|
||||
{ |
|
||||
configuration.GetSection("DistributedCache").Bind(options); |
|
||||
}); |
|
||||
|
|
||||
Configure<RedisCacheOptions>(options => |
|
||||
{ |
|
||||
var redisConfig = ConfigurationOptions.Parse(options.Configuration); |
|
||||
options.ConfigurationOptions = redisConfig; |
|
||||
options.InstanceName = configuration["Redis:InstanceName"]; |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureMvc(IServiceCollection services, IConfiguration configuration) |
|
||||
{ |
|
||||
Configure<AbpAspNetCoreMvcOptions>(options => |
|
||||
{ |
|
||||
options.ExposeIntegrationServices = true; |
|
||||
}); |
|
||||
|
|
||||
Configure<AbpEndpointRouterOptions>(options => |
|
||||
{ |
|
||||
options.EndpointConfigureActions.Add((builder) => |
|
||||
{ |
|
||||
builder.Endpoints.MapHealthChecks(configuration["App:HealthChecks"] ?? "/healthz"); |
|
||||
}); |
|
||||
}); |
|
||||
|
|
||||
services.AddHealthChecks(); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureVirtualFileSystem() |
|
||||
{ |
|
||||
Configure<AbpVirtualFileSystemOptions>(options => |
|
||||
{ |
|
||||
options.FileSets.AddEmbedded<ProjectNameHttpApiHostModule>("PackageName.CompanyName.ProjectName"); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureMultiTenancy(IConfiguration configuration) |
|
||||
{ |
|
||||
// 多租户
|
|
||||
Configure<AbpMultiTenancyOptions>(options => |
|
||||
{ |
|
||||
options.IsEnabled = true; |
|
||||
}); |
|
||||
|
|
||||
var tenantResolveCfg = configuration.GetSection("App:Domains"); |
|
||||
if (tenantResolveCfg.Exists()) |
|
||||
{ |
|
||||
Configure<AbpTenantResolveOptions>(options => |
|
||||
{ |
|
||||
var domains = tenantResolveCfg.Get<string[]>(); |
|
||||
foreach (var domain in domains) |
|
||||
{ |
|
||||
options.AddDomainTenantResolver(domain); |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private void ConfigureSwagger(IServiceCollection services) |
|
||||
{ |
|
||||
// Swagger
|
|
||||
services.AddSwaggerGen( |
|
||||
options => |
|
||||
{ |
|
||||
options.SwaggerDoc("v1", new OpenApiInfo { Title = "ProjectName API", Version = "v1" }); |
|
||||
options.DocInclusionPredicate((docName, description) => true); |
|
||||
options.CustomSchemaIds(type => type.FullName); |
|
||||
options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme |
|
||||
{ |
|
||||
Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", |
|
||||
Name = "Authorization", |
|
||||
In = ParameterLocation.Header, |
|
||||
Scheme = "bearer", |
|
||||
Type = SecuritySchemeType.Http, |
|
||||
BearerFormat = "JWT" |
|
||||
}); |
|
||||
options.AddSecurityRequirement(new OpenApiSecurityRequirement |
|
||||
{ |
|
||||
{ |
|
||||
new OpenApiSecurityScheme |
|
||||
{ |
|
||||
Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } |
|
||||
}, |
|
||||
new string[] { } |
|
||||
} |
|
||||
}); |
|
||||
options.OperationFilter<TenantHeaderParamter>(); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureLocalization() |
|
||||
{ |
|
||||
// 支持本地化语言类型
|
|
||||
Configure<AbpLocalizationOptions>(options => |
|
||||
{ |
|
||||
options.Languages.Add(new LanguageInfo("en", "en", "English")); |
|
||||
options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); |
|
||||
}); |
|
||||
|
|
||||
Configure<AbpLocalizationPersistenceOptions>(options => |
|
||||
{ |
|
||||
// 持久化本地化资源
|
|
||||
options.SaveStaticLocalizationsToPersistence = true; |
|
||||
options.AddPersistenceResource<ProjectNameResource>(); |
|
||||
}); |
|
||||
|
|
||||
Configure<AbpLocalizationCultureMapOptions>(options => |
|
||||
{ |
|
||||
var zhHansCultureMapInfo = new CultureMapInfo |
|
||||
{ |
|
||||
TargetCulture = "zh-Hans", |
|
||||
SourceCultures = new string[] { "zh", "zh_CN", "zh-CN" } |
|
||||
}; |
|
||||
|
|
||||
options.CulturesMaps.Add(zhHansCultureMapInfo); |
|
||||
options.UiCulturesMaps.Add(zhHansCultureMapInfo); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureSecurity(IServiceCollection services, IConfiguration configuration, bool isDevelopment = false) |
|
||||
{ |
|
||||
Configure<AbpAntiForgeryOptions>(options => |
|
||||
{ |
|
||||
// options.AutoValidate = false;
|
|
||||
// options.AutoValidateFilter = (type) => !type.Namespace.Contains("elsa", StringComparison.CurrentCultureIgnoreCase);
|
|
||||
}); |
|
||||
|
|
||||
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) |
|
||||
.AddJwtBearer(options => |
|
||||
{ |
|
||||
configuration.GetSection("AuthServer").Bind(options); |
|
||||
}); |
|
||||
|
|
||||
if (!isDevelopment) |
|
||||
{ |
|
||||
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); |
|
||||
services |
|
||||
.AddDataProtection() |
|
||||
.SetApplicationName("LINGYUN.Abp.Application") |
|
||||
.PersistKeysToStackExchangeRedis(redis, "LINGYUN.Abp.Application:DataProtection:Protection-Keys"); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
private void ConfigureCors(IServiceCollection services, IConfiguration configuration) |
|
||||
{ |
|
||||
services.AddCors(options => |
|
||||
{ |
|
||||
options.AddPolicy(DefaultCorsPolicyName, builder => |
|
||||
{ |
|
||||
builder |
|
||||
.WithOrigins( |
|
||||
configuration["App:CorsOrigins"] |
|
||||
.Split(",", StringSplitOptions.RemoveEmptyEntries) |
|
||||
.Select(o => o.RemovePostFix("/")) |
|
||||
.ToArray() |
|
||||
) |
|
||||
.WithAbpExposedHeaders() |
|
||||
.WithAbpWrapExposedHeaders() |
|
||||
.SetIsOriginAllowedToAllowWildcardSubdomains() |
|
||||
.AllowAnyHeader() |
|
||||
.AllowAnyMethod() |
|
||||
.AllowCredentials(); |
|
||||
}); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void ConfigureWrapper() |
|
||||
{ |
|
||||
Configure<AbpWrapperOptions>(options => |
|
||||
{ |
|
||||
// 取消注释包装结果
|
|
||||
options.IsEnabled = true; |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
private void PreConfigureWrapper() |
|
||||
{ |
|
||||
PreConfigure<AbpHttpClientBuilderOptions>(options => |
|
||||
{ |
|
||||
// http服务间调用发送不需要包装结果的请求头
|
|
||||
options.ProxyClientActions.Add( |
|
||||
(_, _, client) => |
|
||||
{ |
|
||||
client.DefaultRequestHeaders.TryAddWithoutValidation(AbpHttpWrapConsts.AbpDontWrapResult, "true"); |
|
||||
}); |
|
||||
}); |
|
||||
|
|
||||
PreConfigure<AbpDaprClientProxyOptions>(options => |
|
||||
{ |
|
||||
// dapr服务间调用发送不需要包装结果的请求头
|
|
||||
options.ProxyRequestActions.Add( |
|
||||
(appId, httpRequestMessage) => |
|
||||
{ |
|
||||
httpRequestMessage.Headers.TryAddWithoutValidation(AbpHttpWrapConsts.AbpDontWrapResult, "true"); |
|
||||
}); |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
@ -1,127 +0,0 @@ |
|||||
using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; |
|
||||
using LINGYUN.Abp.AuditLogging.Elasticsearch; |
|
||||
using LINGYUN.Abp.EventBus.CAP; |
|
||||
using LINGYUN.Abp.ExceptionHandling.Emailing; |
|
||||
using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; |
|
||||
using LINGYUN.Abp.TextTemplating.EntityFrameworkCore; |
|
||||
using LINGYUN.Abp.Saas.EntityFrameworkCore; |
|
||||
using LINGYUN.Abp.Serilog.Enrichers.Application; |
|
||||
using LINGYUN.Abp.Serilog.Enrichers.UniqueId; |
|
||||
using Microsoft.AspNetCore.Builder; |
|
||||
using Microsoft.AspNetCore.Hosting; |
|
||||
using Microsoft.Extensions.DependencyInjection; |
|
||||
using Microsoft.Extensions.Hosting; |
|
||||
using PackageName.CompanyName.ProjectName.EntityFrameworkCore; |
|
||||
using PackageName.CompanyName.ProjectName.SettingManagement; |
|
||||
using Volo.Abp; |
|
||||
using Volo.Abp.AspNetCore.Authentication.JwtBearer; |
|
||||
using Volo.Abp.AspNetCore.MultiTenancy; |
|
||||
using Volo.Abp.AspNetCore.Serilog; |
|
||||
using Volo.Abp.Autofac; |
|
||||
using Volo.Abp.Caching.StackExchangeRedis; |
|
||||
using Volo.Abp.DistributedLocking; |
|
||||
using Volo.Abp.FeatureManagement.EntityFrameworkCore; |
|
||||
using Volo.Abp.Http.Client.IdentityModel.Web; |
|
||||
using Volo.Abp.Modularity; |
|
||||
using Volo.Abp.PermissionManagement.EntityFrameworkCore; |
|
||||
using Volo.Abp.SettingManagement.EntityFrameworkCore; |
|
||||
using Volo.Abp.Swashbuckle; |
|
||||
using LINGYUN.Abp.AspNetCore.HttpOverrides; |
|
||||
using LINGYUN.Abp.Identity.Session.AspNetCore; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName; |
|
||||
|
|
||||
[DependsOn( |
|
||||
typeof(AbpSerilogEnrichersApplicationModule), |
|
||||
typeof(AbpSerilogEnrichersUniqueIdModule), |
|
||||
typeof(AbpAuditLoggingElasticsearchModule), |
|
||||
typeof(AbpAspNetCoreSerilogModule), |
|
||||
typeof(ProjectNameApplicationModule), |
|
||||
typeof(ProjectNameHttpApiModule), |
|
||||
typeof(ProjectNameEntityFrameworkCoreModule), |
|
||||
typeof(ProjectNameSettingManagementModule), |
|
||||
typeof(AbpEmailingExceptionHandlingModule), |
|
||||
typeof(AbpCAPEventBusModule), |
|
||||
typeof(AbpHttpClientIdentityModelWebModule), |
|
||||
typeof(AbpAspNetCoreMultiTenancyModule), |
|
||||
typeof(AbpSaasEntityFrameworkCoreModule), |
|
||||
typeof(AbpFeatureManagementEntityFrameworkCoreModule), |
|
||||
typeof(AbpPermissionManagementEntityFrameworkCoreModule), |
|
||||
typeof(AbpSettingManagementEntityFrameworkCoreModule), |
|
||||
typeof(AbpLocalizationManagementEntityFrameworkCoreModule), |
|
||||
typeof(AbpTextTemplatingEntityFrameworkCoreModule), |
|
||||
typeof(AbpAspNetCoreAuthenticationJwtBearerModule), |
|
||||
typeof(AbpCachingStackExchangeRedisModule), |
|
||||
typeof(AbpDistributedLockingModule), |
|
||||
typeof(AbpAspNetCoreMvcWrapperModule), |
|
||||
typeof(AbpAspNetCoreHttpOverridesModule), |
|
||||
typeof(AbpIdentitySessionAspNetCoreModule), |
|
||||
typeof(AbpSwashbuckleModule), |
|
||||
typeof(AbpAutofacModule) |
|
||||
)] |
|
||||
public partial class ProjectNameHttpApiHostModule : AbpModule |
|
||||
{ |
|
||||
public override void PreConfigureServices(ServiceConfigurationContext context) |
|
||||
{ |
|
||||
var configuration = context.Services.GetConfiguration(); |
|
||||
|
|
||||
PreConfigureApp(); |
|
||||
PreConfigureWrapper(); |
|
||||
PreConfigureFeature(); |
|
||||
PreConfigureCAP(configuration); |
|
||||
} |
|
||||
|
|
||||
public override void ConfigureServices(ServiceConfigurationContext context) |
|
||||
{ |
|
||||
var hostingEnvironment = context.Services.GetHostingEnvironment(); |
|
||||
var configuration = context.Services.GetConfiguration(); |
|
||||
|
|
||||
ConfigureWrapper(); |
|
||||
ConfigureLocalization(); |
|
||||
ConfigureExceptionHandling(); |
|
||||
ConfigureVirtualFileSystem(); |
|
||||
ConfigureCaching(configuration); |
|
||||
ConfigureAuditing(configuration); |
|
||||
ConfigureIdentity(configuration); |
|
||||
ConfigureMultiTenancy(configuration); |
|
||||
ConfigureJsonSerializer(configuration); |
|
||||
ConfigureSwagger(context.Services); |
|
||||
ConfigureMvc(context.Services, configuration); |
|
||||
ConfigureCors(context.Services, configuration); |
|
||||
ConfigureOpenTelemetry(context.Services, configuration); |
|
||||
ConfigureDistributedLock(context.Services, configuration); |
|
||||
ConfigureSecurity(context.Services, configuration, hostingEnvironment.IsDevelopment()); |
|
||||
} |
|
||||
|
|
||||
public override void OnApplicationInitialization(ApplicationInitializationContext context) |
|
||||
{ |
|
||||
var app = context.GetApplicationBuilder(); |
|
||||
var env = context.GetEnvironment(); |
|
||||
|
|
||||
app.UseForwardedHeaders(); |
|
||||
app.UseMapRequestLocalization(); |
|
||||
app.UseCorrelationId(); |
|
||||
app.UseStaticFiles(); |
|
||||
app.UseRouting(); |
|
||||
app.UseCors(); |
|
||||
app.UseAuthentication(); |
|
||||
app.UseJwtTokenMiddleware(); |
|
||||
app.UseMultiTenancy(); |
|
||||
app.UseAbpSession(); |
|
||||
app.UseDynamicClaims(); |
|
||||
app.UseAuthorization(); |
|
||||
app.UseSwagger(); |
|
||||
app.UseAbpSwaggerUI(options => |
|
||||
{ |
|
||||
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support ProjectName API"); |
|
||||
|
|
||||
var configuration = context.GetConfiguration(); |
|
||||
options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]); |
|
||||
options.OAuthClientSecret(configuration["AuthServer:SwaggerClientSecret"]); |
|
||||
options.OAuthScopes("ProjectName"); |
|
||||
}); |
|
||||
app.UseAuditing(); |
|
||||
app.UseAbpSerilogEnrichers(); |
|
||||
app.UseConfiguredEndpoints(); |
|
||||
} |
|
||||
} |
|
||||
@ -1,28 +0,0 @@ |
|||||
{ |
|
||||
"iisSettings": { |
|
||||
"windowsAuthentication": false, |
|
||||
"anonymousAuthentication": true, |
|
||||
"iisExpress": { |
|
||||
"applicationUrl": "http://localhost:20890", |
|
||||
"sslPort": 0 |
|
||||
} |
|
||||
}, |
|
||||
"profiles": { |
|
||||
"PackageName.CompanyName.ProjectName.HttpApi.Host": { |
|
||||
"commandName": "Project", |
|
||||
"launchBrowser": false, |
|
||||
"dotnetRunMessages": true, |
|
||||
"environmentVariables": { |
|
||||
"ASPNETCORE_ENVIRONMENT": "Development" |
|
||||
}, |
|
||||
"applicationUrl": "http://127.0.0.1:5000" |
|
||||
}, |
|
||||
"IIS Express": { |
|
||||
"commandName": "IISExpress", |
|
||||
"launchBrowser": false, |
|
||||
"environmentVariables": { |
|
||||
"ASPNETCORE_ENVIRONMENT": "Development" |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,31 +0,0 @@ |
|||||
using Microsoft.Extensions.Options; |
|
||||
using Microsoft.OpenApi.Models; |
|
||||
using Swashbuckle.AspNetCore.SwaggerGen; |
|
||||
using System.Collections.Generic; |
|
||||
using Volo.Abp.MultiTenancy; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName; |
|
||||
|
|
||||
public class TenantHeaderParamter : IOperationFilter |
|
||||
{ |
|
||||
private readonly AbpMultiTenancyOptions _options; |
|
||||
public TenantHeaderParamter( |
|
||||
IOptions<AbpMultiTenancyOptions> options) |
|
||||
{ |
|
||||
_options = options.Value; |
|
||||
} |
|
||||
public void Apply(OpenApiOperation operation, OperationFilterContext context) |
|
||||
{ |
|
||||
if (_options.IsEnabled) |
|
||||
{ |
|
||||
operation.Parameters = operation.Parameters ?? new List<OpenApiParameter>(); |
|
||||
operation.Parameters.Add(new OpenApiParameter |
|
||||
{ |
|
||||
Name = TenantResolverConsts.DefaultTenantKey, |
|
||||
In = ParameterLocation.Header, |
|
||||
Description = "Tenant Id/Name", |
|
||||
Required = false |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,153 +0,0 @@ |
|||||
{ |
|
||||
"AgileConfig": { |
|
||||
"IsEnabled": false, |
|
||||
"env": "DEV", |
|
||||
"appId": "PackageName.CompanyName.ProjectName", |
|
||||
"secret": "1q2w3E*", |
|
||||
"nodes": "http://127.0.0.1:15000", |
|
||||
"name": "PackageName.CompanyName.ProjectName", |
|
||||
"tag": "PackageName.CompanyName.ProjectName" |
|
||||
}, |
|
||||
"App": { |
|
||||
"CorsOrigins": "http://127.0.0.1:30000", |
|
||||
"RefreshClaimsUrl": "http://127.0.0.1:30015/", |
|
||||
"HealthChecks": "/healthz" |
|
||||
}, |
|
||||
"Auditing": { |
|
||||
"AllEntitiesSelector": true |
|
||||
}, |
|
||||
"DistributedCache": { |
|
||||
"HideErrors": true, |
|
||||
"KeyPrefix": "LINGYUN.Abp.Application", |
|
||||
"GlobalCacheEntryOptions": { |
|
||||
"SlidingExpiration": "30:00:00", |
|
||||
"AbsoluteExpirationRelativeToNow": "60:00:00" |
|
||||
} |
|
||||
}, |
|
||||
"ConnectionStrings": { |
|
||||
"Default": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456", |
|
||||
"ProjectName": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456", |
|
||||
"AbpSaas": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456", |
|
||||
"AbpFeatureManagement": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456", |
|
||||
"AbpPermissionManagement": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456", |
|
||||
"AbpSettingManagement": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456", |
|
||||
"AbpLocalizationManagement": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456", |
|
||||
"AbpTextTemplating": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456" |
|
||||
}, |
|
||||
"DistributedLock": { |
|
||||
"IsEnabled": true, |
|
||||
"Redis": { |
|
||||
"Configuration": "127.0.0.1,defaultDatabase=15" |
|
||||
} |
|
||||
}, |
|
||||
"OpenTelemetry": { |
|
||||
"IsEnabled": true, |
|
||||
"ZipKin": { |
|
||||
"Endpoint": "http://127.0.0.1:9411/api/v2/spans" |
|
||||
} |
|
||||
}, |
|
||||
"RemoteServices": {}, |
|
||||
"IdentityClients": { |
|
||||
"InternalServiceClient": { |
|
||||
"Authority": "http://127.0.0.1:44385", |
|
||||
"RequireHttps": false, |
|
||||
"MapInboundClaims": false, |
|
||||
"GrantType": "client_credentials", |
|
||||
"Scope": "lingyun-abp-application", |
|
||||
"ClientId": "InternalServiceClient", |
|
||||
"ClientSecret": "1q2w3E*" |
|
||||
} |
|
||||
}, |
|
||||
"CAP": { |
|
||||
"EventBus": { |
|
||||
"DefaultGroupName": "ProjectName", |
|
||||
"GroupNamePrefix": "Dev", |
|
||||
"Version": "v1", |
|
||||
"FailedRetryInterval": 300, |
|
||||
"FailedRetryCount": 10 |
|
||||
}, |
|
||||
"MySql": { |
|
||||
"TableNamePrefix": "ProjectName_cap", |
|
||||
"ConnectionString": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456" |
|
||||
}, |
|
||||
"SqlServer": { |
|
||||
"TableNamePrefix": "ProjectName_cap", |
|
||||
"ConnectionString": "Server=127.0.0.1;Database=ProjectName;User Id=root;Password=123456" |
|
||||
}, |
|
||||
"Sqlite": { |
|
||||
"TableNamePrefix": "ProjectName_cap", |
|
||||
"ConnectionString": "Data Source=./cap.db" |
|
||||
}, |
|
||||
"Oracle": { |
|
||||
"TableNamePrefix": "ProjectName_cap", |
|
||||
"ConnectionString": "Data Source=ProjectName;Integrated Security=yes;" |
|
||||
}, |
|
||||
"PostgreSql": { |
|
||||
"TableNamePrefix": "ProjectName_cap", |
|
||||
"ConnectionString": "Host=localhost;Port=5432;Database=ProjectName;User ID=root;Password=123456;" |
|
||||
}, |
|
||||
"RabbitMQ": { |
|
||||
"HostName": "127.0.0.1", |
|
||||
"Port": 5672, |
|
||||
"UserName": "admin", |
|
||||
"Password": "123456", |
|
||||
"ExchangeName": "LINGYUN.Abp.Application", |
|
||||
"VirtualHost": "/" |
|
||||
} |
|
||||
}, |
|
||||
"Redis": { |
|
||||
"Configuration": "127.0.0.1,defaultDatabase=10", |
|
||||
"InstanceName": "LINGYUN.Abp.Application" |
|
||||
}, |
|
||||
"AuthServer": { |
|
||||
"Authority": "http://127.0.0.1:44385/", |
|
||||
"Audience": "lingyun-abp-application", |
|
||||
"MapInboundClaims": false, |
|
||||
"RequireHttpsMetadata": false, |
|
||||
"SwaggerClientId": "InternalServiceClient", |
|
||||
"SwaggerClientSecret": "1q2w3E*" |
|
||||
}, |
|
||||
"Logging": { |
|
||||
"Serilog": { |
|
||||
"Elasticsearch": { |
|
||||
"IndexFormat": "abp.dev.logging-{0:yyyy.MM.dd}" |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
"AuditLogging": { |
|
||||
"Elasticsearch": { |
|
||||
"IndexPrefix": "abp.dev.auditing" |
|
||||
} |
|
||||
}, |
|
||||
"Elasticsearch": { |
|
||||
"NodeUris": "http://127.0.0.1:9200" |
|
||||
}, |
|
||||
"Serilog": { |
|
||||
"MinimumLevel": { |
|
||||
"Default": "Debug", |
|
||||
"Override": { |
|
||||
"System": "Warning", |
|
||||
"Microsoft": "Warning", |
|
||||
"DotNetCore": "Debug" |
|
||||
} |
|
||||
}, |
|
||||
"WriteTo": [ |
|
||||
{ |
|
||||
"Name": "Console", |
|
||||
"Args": { |
|
||||
"restrictedToMinimumLevel": "Debug", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "Elasticsearch", |
|
||||
"Args": { |
|
||||
"nodeUris": "http://127.0.0.1:9200", |
|
||||
"indexFormat": "abp.dev.logging-{0:yyyy.MM.dd}", |
|
||||
"autoRegisterTemplate": true, |
|
||||
"autoRegisterTemplateVersion": "ESv7" |
|
||||
} |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
@ -1,88 +0,0 @@ |
|||||
{ |
|
||||
"Clock": { |
|
||||
"Kind": "Local" |
|
||||
}, |
|
||||
"Forwarded": { |
|
||||
"ForwardedHeaders": "XForwardedFor,XForwardedProto" |
|
||||
}, |
|
||||
"StringEncryption": { |
|
||||
"DefaultPassPhrase": "s46c5q55nxpeS8Ra", |
|
||||
"InitVectorBytes": "s83ng0abvd02js84", |
|
||||
"DefaultSalt": "sf&5)s3#" |
|
||||
}, |
|
||||
"Json": { |
|
||||
"OutputDateTimeFormat": "yyyy-MM-dd HH:mm:ss", |
|
||||
"InputDateTimeFormats": [ |
|
||||
"yyyy-MM-dd HH:mm:ss", |
|
||||
"yyyy-MM-ddTHH:mm:ss" |
|
||||
] |
|
||||
}, |
|
||||
"AllowedHosts": "*", |
|
||||
"Serilog": { |
|
||||
"MinimumLevel": { |
|
||||
"Default": "Debug", |
|
||||
"Override": { |
|
||||
"Microsoft.EntityFrameworkCore": "Debug", |
|
||||
"System": "Information", |
|
||||
"Microsoft": "Information" |
|
||||
} |
|
||||
}, |
|
||||
"Enrich": [ "FromLogContext", "WithProcessId", "WithThreadId", "WithEnvironmentName", "WithMachineName", "WithApplicationName", "WithUniqueId" ], |
|
||||
"WriteTo": [ |
|
||||
{ |
|
||||
"Name": "Console", |
|
||||
"Args": { |
|
||||
"initialMinimumLevel": "Verbose", |
|
||||
"standardErrorFromLevel": "Verbose", |
|
||||
"restrictedToMinimumLevel": "Verbose", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Debug-.log", |
|
||||
"restrictedToMinimumLevel": "Debug", |
|
||||
"rollingInterval": "Day", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Info-.log", |
|
||||
"restrictedToMinimumLevel": "Information", |
|
||||
"rollingInterval": "Day", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Warn-.log", |
|
||||
"restrictedToMinimumLevel": "Warning", |
|
||||
"rollingInterval": "Day", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Error-.log", |
|
||||
"restrictedToMinimumLevel": "Error", |
|
||||
"rollingInterval": "Day", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
}, |
|
||||
{ |
|
||||
"Name": "File", |
|
||||
"Args": { |
|
||||
"path": "Logs/Fatal-.log", |
|
||||
"restrictedToMinimumLevel": "Fatal", |
|
||||
"rollingInterval": "Day", |
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" |
|
||||
} |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
@ -1 +0,0 @@ |
|||||
dapr run --app-id ProjectName --app-port 5000 -H 3500 -- dotnet run --no-build |
|
||||
@ -1,2 +0,0 @@ |
|||||
cd ../src/PackageName.CompanyName.ProjectName.HttpApi.Client |
|
||||
abp generate-proxy -t csharp -m ProjectName -url http://127.0.0.1:5000/ --without-contracts |
|
||||
@ -1,3 +0,0 @@ |
|||||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> |
|
||||
<ConfigureAwait ContinueOnCapturedContext="false" /> |
|
||||
</Weavers> |
|
||||
@ -1,30 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> |
|
||||
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. --> |
|
||||
<xs:element name="Weavers"> |
|
||||
<xs:complexType> |
|
||||
<xs:all> |
|
||||
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1"> |
|
||||
<xs:complexType> |
|
||||
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" /> |
|
||||
</xs:complexType> |
|
||||
</xs:element> |
|
||||
</xs:all> |
|
||||
<xs:attribute name="VerifyAssembly" type="xs:boolean"> |
|
||||
<xs:annotation> |
|
||||
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation> |
|
||||
</xs:annotation> |
|
||||
</xs:attribute> |
|
||||
<xs:attribute name="VerifyIgnoreCodes" type="xs:string"> |
|
||||
<xs:annotation> |
|
||||
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation> |
|
||||
</xs:annotation> |
|
||||
</xs:attribute> |
|
||||
<xs:attribute name="GenerateXsd" type="xs:boolean"> |
|
||||
<xs:annotation> |
|
||||
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation> |
|
||||
</xs:annotation> |
|
||||
</xs:attribute> |
|
||||
</xs:complexType> |
|
||||
</xs:element> |
|
||||
</xs:schema> |
|
||||
@ -1,27 +0,0 @@ |
|||||
<Project Sdk="Microsoft.NET.Sdk"> |
|
||||
|
|
||||
<Import Project="../../common.props" /> |
|
||||
<Import Project="../../configureawait.props" /> |
|
||||
|
|
||||
<PropertyGroup> |
|
||||
<TargetFrameworks>netstandard2.0;netstandard2.1;net8.0</TargetFrameworks> |
|
||||
<AssemblyName>PackageName.CompanyName.ProjectName.Application.Contracts</AssemblyName> |
|
||||
<PackageId>PackageName.CompanyName.ProjectName.Application.Contracts</PackageId> |
|
||||
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
|
||||
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
|
||||
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
|
||||
<RootNamespace /> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<PackageReference Include="Volo.Abp.Ddd.Application.Contracts" /> |
|
||||
<PackageReference Include="Volo.Abp.Authorization" /> |
|
||||
<PackageReference Include="Volo.Abp.Features" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Dynamic.Queryable.Application.Contracts" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<ProjectReference Include="..\PackageName.CompanyName.ProjectName.Domain.Shared\PackageName.CompanyName.ProjectName.Domain.Shared.csproj" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
</Project> |
|
||||
@ -1,18 +0,0 @@ |
|||||
using PackageName.CompanyName.ProjectName.Localization; |
|
||||
using Volo.Abp.Features; |
|
||||
using Volo.Abp.Localization; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.Features; |
|
||||
|
|
||||
public class ProjectNameFeatureDefinitionProvider : FeatureDefinitionProvider |
|
||||
{ |
|
||||
public override void Define(IFeatureDefinitionContext context) |
|
||||
{ |
|
||||
var group = context.AddGroup(ProjectNameFeatureNames.GroupName, L("Features:ProjectName")); |
|
||||
} |
|
||||
|
|
||||
private static ILocalizableString L(string name) |
|
||||
{ |
|
||||
return LocalizableString.Create<ProjectNameResource>(name); |
|
||||
} |
|
||||
} |
|
||||
@ -1,6 +0,0 @@ |
|||||
namespace PackageName.CompanyName.ProjectName.Features; |
|
||||
|
|
||||
public static class ProjectNameFeatureNames |
|
||||
{ |
|
||||
public const string GroupName = "ProjectName"; |
|
||||
} |
|
||||
@ -1,10 +0,0 @@ |
|||||
using LINGYUN.Abp.Dynamic.Queryable; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName; |
|
||||
/// <summary>
|
|
||||
/// 提供动态查询接口定义
|
|
||||
/// </summary>
|
|
||||
/// <typeparam name="TEntityDto">实体dto类型</typeparam>
|
|
||||
public interface IProjectNameDynamicQueryableAppService<TEntityDto> : IDynamicQueryableAppService<TEntityDto> |
|
||||
{ |
|
||||
} |
|
||||
@ -1,22 +0,0 @@ |
|||||
using PackageName.CompanyName.ProjectName.Localization; |
|
||||
using Volo.Abp.Authorization.Permissions; |
|
||||
using Volo.Abp.Localization; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName.Permissions; |
|
||||
|
|
||||
public class ProjectNamePermissionDefinitionProvider : PermissionDefinitionProvider |
|
||||
{ |
|
||||
public override void Define(IPermissionDefinitionContext context) |
|
||||
{ |
|
||||
var group = context.AddGroup(ProjectNamePermissions.GroupName, L("Permission:ProjectName")); |
|
||||
|
|
||||
group.AddPermission( |
|
||||
ProjectNamePermissions.ManageSettings, |
|
||||
L("Permission:ManageSettings")); |
|
||||
} |
|
||||
|
|
||||
private static LocalizableString L(string name) |
|
||||
{ |
|
||||
return LocalizableString.Create<ProjectNameResource>(name); |
|
||||
} |
|
||||
} |
|
||||
@ -1,8 +0,0 @@ |
|||||
namespace PackageName.CompanyName.ProjectName.Permissions; |
|
||||
|
|
||||
public static class ProjectNamePermissions |
|
||||
{ |
|
||||
public const string GroupName = "ProjectName"; |
|
||||
|
|
||||
public const string ManageSettings = GroupName + ".ManageSettings"; |
|
||||
} |
|
||||
@ -1,17 +0,0 @@ |
|||||
using LINGYUN.Abp.Dynamic.Queryable; |
|
||||
using Volo.Abp.Application; |
|
||||
using Volo.Abp.Authorization; |
|
||||
using Volo.Abp.Features; |
|
||||
using Volo.Abp.Modularity; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName; |
|
||||
|
|
||||
[DependsOn( |
|
||||
typeof(AbpFeaturesModule), |
|
||||
typeof(AbpAuthorizationModule), |
|
||||
typeof(AbpDddApplicationContractsModule), |
|
||||
typeof(AbpDynamicQueryableApplicationContractsModule), |
|
||||
typeof(ProjectNameDomainSharedModule))] |
|
||||
public class ProjectNameApplicationContractsModule : AbpModule |
|
||||
{ |
|
||||
} |
|
||||
@ -1,7 +0,0 @@ |
|||||
namespace PackageName.CompanyName.ProjectName; |
|
||||
|
|
||||
public static class ProjectNameRemoteServiceConsts |
|
||||
{ |
|
||||
public const string RemoteServiceName = "ProjectName"; |
|
||||
public const string ModuleName = "ProjectName"; |
|
||||
} |
|
||||
@ -1,3 +0,0 @@ |
|||||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> |
|
||||
<ConfigureAwait ContinueOnCapturedContext="false" /> |
|
||||
</Weavers> |
|
||||
@ -1,30 +0,0 @@ |
|||||
<?xml version="1.0" encoding="utf-8"?> |
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> |
|
||||
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. --> |
|
||||
<xs:element name="Weavers"> |
|
||||
<xs:complexType> |
|
||||
<xs:all> |
|
||||
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1"> |
|
||||
<xs:complexType> |
|
||||
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" /> |
|
||||
</xs:complexType> |
|
||||
</xs:element> |
|
||||
</xs:all> |
|
||||
<xs:attribute name="VerifyAssembly" type="xs:boolean"> |
|
||||
<xs:annotation> |
|
||||
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation> |
|
||||
</xs:annotation> |
|
||||
</xs:attribute> |
|
||||
<xs:attribute name="VerifyIgnoreCodes" type="xs:string"> |
|
||||
<xs:annotation> |
|
||||
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation> |
|
||||
</xs:annotation> |
|
||||
</xs:attribute> |
|
||||
<xs:attribute name="GenerateXsd" type="xs:boolean"> |
|
||||
<xs:annotation> |
|
||||
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation> |
|
||||
</xs:annotation> |
|
||||
</xs:attribute> |
|
||||
</xs:complexType> |
|
||||
</xs:element> |
|
||||
</xs:schema> |
|
||||
@ -1,26 +0,0 @@ |
|||||
<Project Sdk="Microsoft.NET.Sdk"> |
|
||||
|
|
||||
<Import Project="../../common.props" /> |
|
||||
<Import Project="../../configureawait.props" /> |
|
||||
|
|
||||
<PropertyGroup> |
|
||||
<TargetFramework>net8.0</TargetFramework> |
|
||||
<AssemblyName>PackageName.CompanyName.ProjectName.Application</AssemblyName> |
|
||||
<PackageId>PackageName.CompanyName.ProjectName.Application</PackageId> |
|
||||
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
|
||||
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
|
||||
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
|
||||
<RootNamespace /> |
|
||||
</PropertyGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<PackageReference Include="Volo.Abp.Ddd.Application" /> |
|
||||
<PackageReference Include="LINGYUN.Abp.Dynamic.Queryable.Application" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
<ItemGroup> |
|
||||
<ProjectReference Include="..\PackageName.CompanyName.ProjectName.Application.Contracts\PackageName.CompanyName.ProjectName.Application.Contracts.csproj" /> |
|
||||
<ProjectReference Include="..\PackageName.CompanyName.ProjectName.Domain\PackageName.CompanyName.ProjectName.Domain.csproj" /> |
|
||||
</ItemGroup> |
|
||||
|
|
||||
</Project> |
|
||||
@ -1,13 +0,0 @@ |
|||||
using PackageName.CompanyName.ProjectName.Localization; |
|
||||
using Volo.Abp.Application.Services; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName; |
|
||||
|
|
||||
public abstract class ProjectNameAppServiceBase : ApplicationService |
|
||||
{ |
|
||||
protected ProjectNameAppServiceBase() |
|
||||
{ |
|
||||
LocalizationResource = typeof(ProjectNameResource); |
|
||||
ObjectMapperContext = typeof(ProjectNameApplicationModule); |
|
||||
} |
|
||||
} |
|
||||
@ -1,10 +0,0 @@ |
|||||
using AutoMapper; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName; |
|
||||
|
|
||||
public class ProjectNameApplicationMapperProfile : Profile |
|
||||
{ |
|
||||
public ProjectNameApplicationMapperProfile() |
|
||||
{ |
|
||||
} |
|
||||
} |
|
||||
@ -1,27 +0,0 @@ |
|||||
using LINGYUN.Abp.Dynamic.Queryable; |
|
||||
using Microsoft.Extensions.DependencyInjection; |
|
||||
using Volo.Abp.Application; |
|
||||
using Volo.Abp.Authorization; |
|
||||
using Volo.Abp.AutoMapper; |
|
||||
using Volo.Abp.Modularity; |
|
||||
|
|
||||
namespace PackageName.CompanyName.ProjectName; |
|
||||
|
|
||||
[DependsOn( |
|
||||
typeof(AbpAuthorizationModule), |
|
||||
typeof(AbpDddApplicationModule), |
|
||||
typeof(ProjectNameDomainModule), |
|
||||
typeof(ProjectNameApplicationContractsModule), |
|
||||
typeof(AbpDynamicQueryableApplicationModule))] |
|
||||
public class ProjectNameApplicationModule : AbpModule |
|
||||
{ |
|
||||
public override void ConfigureServices(ServiceConfigurationContext context) |
|
||||
{ |
|
||||
context.Services.AddAutoMapperObjectMapper<ProjectNameApplicationModule>(); |
|
||||
|
|
||||
Configure<AbpAutoMapperOptions>(options => |
|
||||
{ |
|
||||
options.AddProfile<ProjectNameApplicationMapperProfile>(validate: true); |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue