ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅! ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ Ρ Π½Π°Π΄ΠΏΠΈΡΡΡ "ATTENTION!", ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΈ ΠΌΠ΅ΡΡΠ° ΠΏΠΎΡΡΠ΅Π±ΡΡΡ ΠΎΡ Π²Π°Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΈ/ΠΈΠ»ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ.
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π² ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ (Visual Studio
, Rider
, dotnet CLI
) ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ° ΠΏΡΠΎΡΠΈΡΠ°ΠΉΡΠ΅ ΡΡΠ°ΡΡΡ wiki, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠΏΠΈΡΠ°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π½Π° Π²Π°Ρ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ.
- Calabonga.Microservice.IdentityModule.Template nuget-ΠΏΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ° Π² ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ (
Visual Studio
,Rider
,dotnet CLI
) Ρ OpenIddict. - Calabonga.Microservice.Module.Template nuget-ΠΏΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ° Π² ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ (
Visual Studio
,Rider
,dotnet CLI
) Π±Π΅Π· OpenIddict.
- ΠΠ° ΡΠ°ΠΉΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.
- ΠΠΈΠ΄Π΅ΠΎ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Nimble Framework v.6.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅
IdentityModule
.OpenIddict.EntityFrameworkCore 6.0.0
OpenIddict.AspNetCore 6.0.0
- OpenIddict ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄Π»Ρ 6.0.0. ΠΡ
ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΠΎ, ΡΡΠΎ
Logout
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π½Π°EndSession
:- OpenIddictConstants.Permissions.Endpoints.Logout, + OpenIddictConstants.Permissions.Endpoints.EndSession,
- Π‘ΠΎΠ·Π΄Π°Π½Π° Π½ΠΎΠ²Π°Ρ ΠΏΠ°ΠΏΠΊΠ° Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ
AuthClientSamples
, Π² ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡCalabonga.BlazorApp
Π½Π° Π±Π°Π·Π΅Blazor Web App
, ΠΊΠ°ΠΊ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΠΈΡΠΏΠΎΠ»Π·ΠΎΠ²Π°Π½ΠΈΡCalabonga.Microservice.IdentityModule
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Blazor-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈ c ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°ΠΌΠΈ Π½Π° Wiki.
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½
EnableLogoutEndpointPassthrough
endpoint, Π° ΡΠ°ΠΊΠΆΠ΅SetIntrospectionEndpointUris
. - ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°
PKCE
Π΄Π»ΡAuthorization Code Flow
. - ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅
IdentityModule
. - ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅
Module
.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»Π°ΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ NET9.0, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ.
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½
Microsoft.AspNetCore.OpenApi
ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. Swashbuckle.AspNetCore
nuget-ΠΏΠ°ΠΊΠ΅Ρ ΡΠ΄Π°Π»Π΅Π½.Swashbuckle.AspNetCore.SwaggerUI
nuget-ΠΏΠ°ΠΊΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ°ΠΊ UI Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ OpenApi Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ (openapi/v1.json
).- ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ CORS ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ
- Π‘Π±ΠΎΡΠΊΠ° CI/CD ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π° Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ NET9,
- ΠΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΡΠ΄Π°Π»Π΅Π½Π° ΠΏΠ°ΠΏΠΊΠ°
Output
, Π³Π΄Π΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΡ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π²Π΅ΡΡΠΈΠΉ. - ΠΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΡΠ΄Π°Π»Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ (ΠΏΠ°ΠΏΠΊΠ°
VSIX
) Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»ΡVisual Studio
, ΡΠ°ΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ Π½Π΅ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ, Π² Π²ΠΈΠ΄Ρ ΠΏΡΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π΄Π»Ρ Visual Studio. - ΠΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΡΠ΄Π°Π»Π΅Π½Π° ΠΏΠ°ΠΏΠΊΠ°
IdentityServer4Mvc
, Π³Π΄Π΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΡ ΡΠΎΡΠΌΡ MVC-ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄Π»Ρ IdentityServer4. - ΠΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΡΠ΄Π°Π»Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ
Builder
(ΠΏΠ°ΠΏΠΊΠ° Builder), ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ» "Π²ΡΡΡΠ½ΡΡ" ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ². ΠΠ°Π½Π½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅
IdentityModule
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅
Module
.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅
IdentityModule
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅
Module
.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅
IdentityModule
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅
Module
.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅
IdentityModule
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅
Module
. - ΠΡΠΏΡΠ°Π²Π»Π΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½Π°: Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ sln-ΡΠ°ΠΉΠ»Π°. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ andrew-moiseyev.
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΏΡΠΎΠ΅ΠΊΡΡ nuget-templates Π΄Π»Ρ ΠΎΠ±ΠΎΠΈΡ tool CLI.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΠΌΠ΅ΡΡΠΎ nuget-ΠΏΠ°ΠΊΠ΅ΡΠ° OperationResultCore
Π² ΠΎΠ±ΠΎΠΈΡ
ΡΠ°Π±Π»ΠΎΠ½Π°Ρ
ΡΠ΅ΠΏΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠ°Ρ ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ RFC7807 - Calabonga.Results
, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ "ΠΎΠ±Π»Π΅Π³ΡΠΈΠ»Π°" ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠ΄Π°Π²Π°Π΅ΠΌΡΡ
ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠ²ΡΡΠΈΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·.
- Π‘Π±ΠΎΡΠΊΠ°
OperationResultCore
ΡΠ΄Π°Π»Π΅Π½Π° ΠΈΠ· ΠΎΠ±ΠΎΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ². - Π‘Π±ΠΎΡΠΊΠ°
Calabonga.Results
ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΠΈΠ· ΠΎΠ±ΠΎΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ². - ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ
- Π£Π΄Π°Π»Π΅Π½Ρ Π½Π΅Π½ΡΠΆΠ½ΡΠ΅ Π°ΡΡ ΠΈΠ²Ρ ΡΡΠ°ΡΡΡ Π²Π΅ΡΡΠΈΠΉ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ Π½ΠΈΠΆΠ΅ Π²Π΅ΡΡΠΈΠΈ 8.x.
- Π£Π΄Π°Π»Π΅Π½Ρ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ»ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ template-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
ΠΠΎΠ²Π°Ρ ΠΈ ΠΏΠ΅ΡΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π΄Π»Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ NET8.
-
ΠΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΠΏΠ°ΠΏΠΎΠΊ ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, namespace Π² ΡΠ°Π±Π»ΠΎΠ½Π°Ρ , ΡΡΠΎΠ±Ρ ΡΠΎΠ±Π»ΡΡΡΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠ΅Π½Π½ΠΎΡΡΠΈ ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡΡ .
-
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ
-
IdentityModule
: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΏΠΎBearer
Π²Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊCookie
. -
IdentityModule
: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π°PolicyCorsName
ΠΈPolicyDefaultName
-
IdentityModule
ΠΈModule
: ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡEventItemEndpoints
ΠΈProfilesEndpoints
ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡEndpoint Explorer
Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ.http
ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΏΡΡΠΌΠΎ ΠΈΠ·Visual Studio
: -
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π° ΡΠ±ΠΎΡΠΊΠ°
Microsoft.AspNetCore.OpenApi
Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈOpenApi
. Π£Π΄Π°Π»Π΅Π½Ρ Π½Π΅Π½ΡΠΆΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. -
ΠΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΏΡΠ°Π²ΠΊΠΈ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅.
-
ΠΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΡΠ΄Π°Π»Π΅Π½Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π΄Π»Ρ NET 5, Π° ΡΠ°ΠΊΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΡΠ΅ Π°ΡΡ ΠΈΠ²Ρ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ NET 5.
-
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ
-
ΠΠ΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΏΡΠ°Π²ΠΊΠΈ ΠΏΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ
appSettings.json
Π΄Π»Ρdevelop
ΠΈproduction
ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ. -
ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ NullReferenceException Π² ΡΠ°ΠΉΠ» ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ².
- <PropertyGroup> - <TargetFramework>net7.0</TargetFramework> - <Nullable>enable</Nullable> - <ImplicitUsings>enable</ImplicitUsings> - </PropertyGroup> + <PropertyGroup> + <TargetFramework>net7.0</TargetFramework> + <Nullable>enable</Nullable> + <ImplicitUsings>enable</ImplicitUsings> + <TreatWarningsAsErrors>true</TreatWarningsAsErrors> + <WarningsAsErrors>enable</WarningsAsErrors> + </PropertyGroup>
-
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
.editor.config
.+[*.json] + +indent_size = 4 +indent_style = space +tab_width = 4 # C# files [*.cs] @@ -218,10 +223,15 @@ dotnet_naming_style.instance_field_style.required_prefix = _ # ReSharper properties max_line_length = 200 +resharper_arguments_anonymous_function = named +resharper_blank_lines_after_multiline_statements = 1 +resharper_blank_lines_before_control_transfer_statements = 1 +resharper_csharp_keep_blank_lines_in_code = 1 resharper_csharp_max_line_length = 200 resharper_csharp_wrap_after_declaration_lpar = true resharper_csharp_wrap_extends_list_style = chop_if_long resharper_csharp_wrap_lines = false +resharper_instance_members_qualify_declared_in = base_class resharper_max_attribute_length_for_same_line = 300 resharper_place_type_constraints_on_same_line = true resharper_wrap_before_arrow_with_expressions = true
- Π‘Π΄Π΅Π»Π°Π½ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΠΏΠ°ΠΏΠΎΠΊ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Ρ ΡΠ΅Π»ΡΡ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ Clean Architecture, ΠΈ Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ Vertical Slice Architecture. ΠΡΠΏΡΡΠ΅Π½Π°
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π±Π°Π·ΠΎΠ²ΡΡ ΡΠ±ΠΎΡΠΎΠΊ
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½Ρ ΠΌΠ΅Π»ΠΊΠΈΠ΅ Π½Π΅Π΄ΠΎΡΠ΅ΡΡ (naming convention, syntax issies, etc.)
Π‘ΠΎΠ·Π΄Π°Π½Ρ ΡΠ°Π±Π»ΠΎΠ½Ρ Π΄Π»Ρ dotnet CLI
. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρ dotnet
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π±Π»ΠΎΠ½ Π΄Π»Ρ Microservice Identity Module
Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
dotnet new install Calabonga.Microservice.IdentityModule.Template
Π Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Microservice Module
Π½ΡΠΆΠ½ΠΎ ΡΠ°ΠΊΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
dotnet new install Calabonga.Microservice.Module.Template
ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Π»ΠΈ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ
dotnet new list
ΠΠΎΠΌΠ°Π½Π΄Π° Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ²:
Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΎΠ½ΠΈ ΡΡΠ°Π½ΡΡ Π΄ΠΎΡΡΡΠΏΡ Π² Visual Studio ΠΈ JetBrains Rider.
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ
- ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠ»Π°ΡΡΠΎΠ² Π΄Π»Ρ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ² ΠΎΡ
IRequest
ΠΈIRequestHandler
. Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΏΡΠΎΡΡ Ρ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Ρ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»Π°ΡΡ, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠ΄ΠΎΠ±Π½Π΅Π΅. - ΠΠΎΠΏΡΠ°Π²Π»Π΅Π½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Summary
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½Π° Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ backend (API) Π΄Π»Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΠΎΠ²Π°ΡΠΎΠ². Π ΡΡΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ "ΠΏΠΎΡΠ°Π³ΠΎΠ²Π°Ρ" ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Π²ΠΈΠ΄Π΅ΠΎ. ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ (examples of using) ΡΠ°Π·Π½ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ²: Validation, Transactions, Notification and etc.
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ ΡΠ±ΠΎΡΠΊΠΈ (nuget) Π΄Π»Ρ
AutoMapper
,FluentValidation
,Microsoft.AspNetCore.Authentication
,Serilog
. - ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΄Π»Ρ
Serilog
Π²ΡΠ½Π΅ΡΠ΅Π½Π° Π²appSettings.json
LoggerExtensions
ΡΠ΄Π°Π»Π΅Π½Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΎ Structural logging Π½Π° Π±Π°Π·Π΅Serilog
.- ΠΠΎΡΠΎΠΌΡ ΠΊΠ°ΠΊ
StopTheHostException
ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½HostAbortedException
ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π΅Π³ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠ°Π»ΠΈ ΠΏΠΎ-Π½ΠΎΠ²ΠΎΠΌΡ. - ΠΠ΅ΡΠ΅Ρ
Π²Π°Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
ValidationException
ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π·OperationResult
, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ValidatorBehavior
.
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ ΡΠ±ΠΎΡΠΊΠΈ (nuget) Π΄Π»Ρ OpenIddict (OAuth2.0).
- ΠΠ· ΡΠ°Π±Π»ΠΎΠ½Π° ΡΠ΄Π°Π»Π΅Π½Π° ΡΠ±ΠΎΡΠΊΠ°
GitInfo
, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ»Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ GIT, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²Π½Π΅ ΠΏΠ°ΠΏΠΊΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΏΠΎΡΠ²Π»ΡΠ»Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠ°:NETSDK1018 Invalid NuGet version string: '0.0.0+main.'.
. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ Ρ Π½Π°Π΄ΠΏΠΈΡΡΡ "ATTENTION!", ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΈ ΠΌΠ΅ΡΡΠ° ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡ Π²Π°Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ GIT Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ. - ΠΡΠΏΡΠ°Π²Π»Π΅Π½Π° ΡΠ°Π±ΠΎΡΠ°
FluentValidation
Π΄Π»ΡEventItemValidator
. - ΠΡΠΏΡΠ°Π²Π»Π΅Π½Π° ΡΠ°Π±ΠΎΡΠ°
ErrorHandlerMiddleware
Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ.
ΠΠ΅ΡΡΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΠ»Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ:
- ΠΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ
Mediatr
ΠΏΠΎΠ»ΡΡΠΈΠ»Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π±ΡΠ»Π° ΡΠ΄Π°Π»Π΅Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΠ°MediatR.Extensions.Microsoft.DependencyInjection
. Π ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π°ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
- services.AddMediatR(Assembly.GetExecutingAssembly());
+ services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<Program>());
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ ΡΠ±ΠΎΡΠΊΠΈ
EntityFramework
. - ΠΠ±Π½ΠΎΠ²ΠΈΠ»Π°ΡΡ Π²Π΅ΡΡΠΈΡ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Visual Studio (VSIX).
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ
Π²Π°ΠΆΠ½ΡΡ
OpenIddict
:
- <PackageReference Include="OpenIddict.AspNetCore" Version="3.1.1" />
+ <PackageReference Include="OpenIddict.AspNetCore" Version="4.0.0" />
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ Π²
IAccountService
. ΠΠ° ΡΡΠ΅Ρ ΡΡΠΎΠ³ΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ ΡΡ Π·Π°ΠΏΡΠΎΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π·Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅.
Π¨Π°Π±Π»ΠΎΠ½Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π΄Π»Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΌΠΈΠ³ΡΠΈΡΠΎΠ²Π°Π»ΠΈ Π½Π° NET7. ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π²ΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ nuget-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΡΠΎΡΡΡΡ Π½Π° NET7. ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ CI/CD Π΅ΡΠ»ΠΈ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π΄Π»Ρ NET7.
ΠΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ. Π’ΠΎ Π΅ΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½Π° Calabonga.Microservice.Module
ΠΌΠΎΠΆΠ΅Ρ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°ΡΡΡΡ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΎ ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½Π° Calabonga.Microservice.IdentityModule
ΠΏΡΡΠΌΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ².
Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π±ΡΠ»ΠΈ Π² ΡΠ°Π·Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΡ Π² ΠΏΡΠΎΡΠ»ΡΠΉ ΡΠ°Π·, ΡΠ°Π±Π»ΠΎΠ½Ρ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ (Π Π±ΡΠ΄ΡΡΠ΅ΠΌ ΡΡΠΎ ΡΠ°ΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π½Π΅Π²Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΎ):
- Calabonga.Microservice.IdentityModule ΠΈΠΌΠ΅Π΅Ρ Π²Π΅ΡΡΠΈΡ
6.1.4
- Calabonga.Microservice.Module ΠΈΠΌΠ΅Π΅Ρ Π²Π΅ΡΡΠΈΡ
6.1.2
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ ΡΠ±ΠΎΡΠΊΠΈ (nuget-ΠΏΠ°ΠΊΠ΅ΡΡ)
- Π£Π΄Π°Π»Π΅Π½Ρ ΡΠ°Π±Π»ΠΎΠ½Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ IdentityServer4 Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ.
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠ±ΠΎΡΠΊΠ° Calabonga.AspNetCore.AppDefinitions, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ AppDefinitions Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ ASP.NET Core.
Π Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ 6.1.3
ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎ Authorization Code Flow
. ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° ΡΠ°ΠΉΡΠ΅ OpenIddict Samples. Π’Π΅ΠΏΠ΅ΡΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Consent
, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Ρ Π±ΠΎΠ»Π΅Π΅ ΠΆΠ΅ΡΡΠΊΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ id_token
ΠΈ access_token
, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌΠΈ OAuth2.0
.
Π Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ 6.1.2
Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ EntityFramework
ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ Π΄Π»Ρ Microsoft SQL Server
(UseSqlClient). ΠΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° Π±ΡΠ»ΠΈ Π·Π°ΠΊΠΎΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Ρ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π΄Π»Ρ IN-MEMORY ΡΠ΅ΠΆΠΈΠΌΠ°.
Π Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ 6.1.1
ΡΠ΄Π°Π»Π΅Π½Ρ ΠΏΡΠΎΠ΅ΠΊΡΡ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ FullAPI (Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΠ°ΠΏΠΊΠΎΠΉ). ΠΠ΅ΡΡΠΈΡ Ρ IdentityServer
Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, Π½ΠΎ ΠΏΠΎΠΊΠ° ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΅Π΅ Π½Π°ΠΉΡΠΈ Π² ΠΏΠ°ΠΏΠΊΠ΅ MinimalAPI-IS4. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π΅ΡΠ΅ Π½ΡΠΆΠ½Ρ ΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΡ, Π½Π°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ fork ΠΌΠΎΠ΅Π³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π² ΡΠ°Π±Π»ΠΎΠ½Π°Ρ (EntityFramework, FluentValidation).
- Π£Π΄Π°Π»Π΅Π½Ρ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ.
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ Π°ΡΡ ΠΈΠ²Ρ Π΄Π»Ρ Visual Studio Π² ΠΏΠ°ΠΏΠΊΠ΅ OUTPUT.
ΠΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ NET6
(Π ΠΏΠ°ΠΏΠΊΠ΅ AspNetCore v6.1) ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ Nimble Framework
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ. Nimble Framework
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ IdentityModule
(AuthServer) ΠΈ Module (microservice). ΠΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Π° Π΄Π»Ρ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ.
- Π£Π΄Π°Π»Π΅Π½ IdentityServer4 ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΠ²Π° Π΄Π»Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Π±Π°Π·Π΅ OAuth2.0. Π’Π΅ΠΏΠ΅ΡΡ Nimble Framework ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ ΡΠ°Π±Π»ΠΎΠ½Π° Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ OpenIddict, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ OAuth2.0.
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ swagger. Π’Π΅ΠΏΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Authorization Code Flow, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠΎΡΠΌΡ Π²Ρ ΠΎΠ΄Π°. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ "ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ".
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ Π²ΡΠΎΡΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² (ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΠ»Π΅ΠΉ Π² ΡΠΎΠΊΠ΅Π½)
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ (ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Ρ Π½Π° NET6), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π² ΡΠ°Π±Π»ΠΎΠ½Π°Ρ
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Definitions
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ Automapper ΠΈ Mediatr
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ASP.NET Core, EntityFrameworkCore
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΊ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΎ Π΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΈ ΠΏΡΠΎΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΡΠΎ Copyright
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ "ΡΠ±ΠΎΡΡΠΈΠΊ" ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΡΡΡΡΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ solutions
Π ΡΡΠ°ΡΡΠ΅ Π±Π»ΠΎΠ³Π° ΠΈ ΠΠΈΠ΄Π΅ΠΎ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡ
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ OpenIddict
Π² ΡΠ°Π±Π»ΠΎΠ½Π°Ρ
Π·Π°Π²Π΅ΡΡΠ΅Π½Π°, ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΡΠΌΠΈΡΡΡΡΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ Π΄Π»Ρ Visual Studio
.
ΠΠ°ΡΠ°Π»ΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ ΠΎΡ IdentityServer4 Π½Π° OpenIddict ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅ΡΠ²ΠΈΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ OAuth2.0. ΠΡΠΈΡΠΈΠ½Π° ΠΏΠ΅ΡΠ΅Π΅Π·Π΄Π° - ΡΠΊΠΎΡΠΎΠ΅ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ ΡΡΠΎΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ IdentityServer4 ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π΅Π³ΠΎ Π½Π° ΠΏΠ»Π°ΡΠ½ΡΡ ΠΎΡΠ½ΠΎΠ²Ρ.
ΠΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ NET6 (Π ΠΏΠ°ΠΏΠΊΠ΅ AspNetCore v6.0
) ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° Π²ΠΈΠ΄Π° ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ² (FullAPI ΠΈ MinimalAPI), ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ IdentityModel ΠΈ ΠΏΡΠΎΡΡΠΎΠΉ Module. ΠΠ°ΠΏΠΊΠ° FullAPI ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΠΏΡΠΎΡΡΠΎ ΠΎΠ½ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Ρ Π½Π° NET6. Π Π² ΠΏΠ°ΠΏΠΊΠ΅ MinimalAPI Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ ΡΠ΅Ρ
ΠΆΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½Ρ Π½Π° Π±Π°Π·Π΅ MinimalAPI.
- Π¨Π°Π±Π»ΠΎΠ½Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Ρ Π½Π° Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ NET6. ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π½ΠΎΠ²ΡΠ΅ "ΡΠΈΡΠΊΠΈ", ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π² C#.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ASP.NET Core, EntityFrameworkCore ΠΈ Swagger (OpenAPI). Π’Π΅ΠΏΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²Π΅ΡΡΠΈΠΈ NET6.
- Π£Π΄Π°Π»Π΅Π½Ρ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Readonly/Writable (Calabonga.UnitOfWork.Controllers). Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΡΠ°Π»ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π½Π° Π±Π°Π·Π΅ Mediatr.
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΏΠ°ΠΏΠΎΠΊ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Vertical Slice Architecture, ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» Jimmy Bogard.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ VSIX-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Visual Studio.
- Π£Π΄Π°Π»Π΅Π½Ρ ΡΡΠ°ΡΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΉ NET Core 2.2 ΠΈ NET Core 3.0.
- ΠΠ°ΡΠ°Π»Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ASP.NET Core, EntityFrameworkCore ΠΈ Swagger (OpenAPI). Π ΡΠ°ΠΊΠΆΠ΅ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ Calabonga.Microservices.Core, FluentValidation ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² Π² ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡΠΈ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡ
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ VSIX-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Visual Studio.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ASP.NET Core, EntityFrameworkCore ΠΈ Swagger (OpenAPI). Π ΡΠ°ΠΊΠΆΠ΅ nuget-ΠΏΠ°ΠΊΠ΅Ρ FluentValidation ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
- ΠΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΏΠ΅ΡΠ΅Π²Π΅Π΄ΠΈΠ½ Π½Π° lambda-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄Π΅.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ VSIX-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Visual Studio.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ASP.NET Core ΠΈ EntityFrameworkCore. Π ΡΠ°ΠΊΠΆΠ΅ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ OperationResultCore, Calabonga.Microservices.Core, Swagger, FluentValidation ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ VSIX-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Visual Studio.
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΠΊ.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ASP.NET Core ΠΈ EntityFrameworkCore. Π ΡΠ°ΠΊΠΆΠ΅ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ OperationResultCore, Calabonga.Microservices.Core, Swagger, FluentValidation ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
- Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ logger Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π° Serilog. Π’Π΅ΠΏΠ΅ΡΡ ΡΠΈΡΠ°ΡΡ Π»ΠΎΠ³ΠΈ ΡΡΠ°Π»ΠΎ ΠΏΡΠΎΡΠ΅.
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΠΊ.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ASP.NET Core ΠΈ EntityFrameworkCore. Π ΡΠ°ΠΊΠΆΠ΅ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ OperationResultCore, Calabonga.Microservices.Core ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
- Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Mediatr-Π·Π°ΠΏΡΠΎΡΠΎΠ² (Request) ΠΈΠ· ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ»ΠΈΡΡ Π² Π·Π°ΠΏΠΈΡΠΈ (class -> record) Π‘#.
- Π£Π΄Π°Π»Π΅Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ±ΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ½Π΅ΡΠ΅Π½Ρ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΠΊ.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ASP.NET Core ΠΈ EntityFrameworkCore Π΄ΠΎ Π²Π΅ΡΡΠΈΠΉ (5.0.4). Π ΡΠ°ΠΊΠΆΠ΅ nuget-ΠΏΠ°ΠΊΠ΅ΡΡ OperationResultCore, Calabonga.Microservices.Core ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
- Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Mediatr-Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈΠ· ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Π½Ρ Π² ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΈΠ· ΡΠ±ΠΎΡΠΊΠΈ Calabonga.AspNetCore.Controllers, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ»ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ.
- ΠΡΠΈΠΌΠ΅Π½Π΅Π½Ρ ΡΠ·ΡΠΊΠΎΠ²ΡΠ΅ ΡΠΈΡΠΊΠΈ ΠΈΠ· C# 9.0. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π±ΡΠ» Π½Π΅ΡΠ»Π°Π±ΡΠΉ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ.
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΠΊ.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ
ASP.NET Core
ΠΈEntityFramework Core
Π΄ΠΎ Π²Π΅ΡΡΠΈΠΉ (5.0.2). Π ΡΠ°ΠΊΠΆΠ΅ nuget-ΠΏΠ°ΠΊΠ΅ΡΡOperationResultCore
,Calabonga.Microservices.Core
ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
- Π ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ° Ρ IdentityServer4 ΠΈ ΡΠ°Π±Π»ΠΎΠ½Π΅ Π±Π΅Π· Π½Π΅Π³ΠΎ ΡΠ΄Π°Π»Π΅Π½Ρ ΠΏΡΠΎΠ΅ΠΊΡΡ xxx.Core. Π€Π°ΠΉΠ»Ρ ΠΈΠ· ΡΡΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Π½Ρ Π² ΠΏΡΠΎΠ΅ΠΊΡ xxx.Entities. Π‘ΡΡΠ»ΠΊΠΈ Π½Π° Exceptions Π²ΡΠ½Π΅ΡΠ΅Π½Ρ Π² nuget-ΠΏΠ°ΠΊΠ΅Ρ
Calabonga.Microservices.Core
. - Π ΡΠ°Π±Π»ΠΎΠ½Π΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ° Ρ IdentityServer4 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠ°ΠΊ Π΄Π»Ρ Cookie ΡΠΈΠΏΠ°, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ Bearer. ΠΠ°! Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½ΠΎ Π΄Π²Π° ΡΠΈΠΏΠ° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
- ΠΡΠΈΠΌΠ΅Π½Π΅Π½Ρ ΡΠ·ΡΠΊΠΎΠ²ΡΠ΅ ΡΠΈΡΠΊΠΈ ΠΈΠ· C# 8.0. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π±ΡΠ» Π½Π΅ΡΠ»Π°Π±ΡΠΉ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ.
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΠΊ.
- ΠΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ Π²ΠΎ Π²ΡΠ΅Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡΡ (solutions) ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ .NET 5.0.
- ΠΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ nuget-ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ
ASP.NET Core
ΠΈEntityFramework Core
(5.0.0). - ΠΠΎΠ±Π°Π²ΠΈΠ»Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΠ°Π½ Π½Π° Π²ΠΈΠ΄Π΅ΠΎ ILogger Π² ASP.NET Core
- ΠΠ° ΡΡΡΠ°Π½ΠΈΡΡ API (
Swagger
) Π²ΡΠ²Π΅Π΄Π΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠΈ Π²Π΅ΡΠΊΠΈ (branch) ΠΈ Π½ΠΎΠΌΠ΅Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ (commit).
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Π° Π½Π° GitHub Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Wiki
Π¨Π°Π±Π»ΠΎΠ½ (template) Π΄Π»Ρ Visual Studio Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π½Π° Π±Π°Π·Π΅ ASP.NET Core.
ASP NET Core 3.1 - Π¨Π°Π±Π»ΠΎΠ½Ρ Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΈ ASP.NET Core 3.1
ASP NET Core 5.0 - Π¨Π°Π±Π»ΠΎΠ½Ρ Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΈ ASP.NET Core 5.0
ASP NET Core 6.0 - Π¨Π°Π±Π»ΠΎΠ½Ρ Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΈ ASP.NET Core 6.0
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Nimble Templates
Calabonga.AspNetCore.Controllers nuget-ΠΏΠ°ΠΊΠ΅Ρ Π½Π° Π±Π°Π·Π΅ Mediatr
Calabonga.UnitOfWork.Controllers nuget-ΠΏΠ°ΠΊΠ΅Ρ Π½Π° base Readonly/Writable controllers
ΠΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ: Π¨Π°Π±Π»ΠΎΠ½ Π΄Π»Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°
ΠΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ: Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠΎΠΌ
ΠΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ: ΠΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ
ΠΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ: ΠΡΠΎΠΊΡΠΈ Π΄Π»Ρ frontend
ΠΠΎΠΏΡΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π² Π±Π»ΠΎΠ³Π΅
ΠΡΠΎ NimbleFramework ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ ΡΠΎΠ»ΠΈΠΊΠΈ. ΠΠ½ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡ ΠΏΠΎ Π²Π΅ΡΡΠΈΡΠΌ, Π½ΠΎ Π΄Π»Ρ Π²ΡΠ΅ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Π½Π°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ
Π§Π°ΡΡΡ 0. Nimble: Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π΄Π»Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ²
Π§Π°ΡΡΡ 1. Nimble: ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ° Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅
Π§Π°ΡΡΡ 2. Nimble: Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π΄Π»Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ²
Π§Π°ΡΡΡ 3. Nimble: ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΏΠΎΠ½ΡΡΠΈΡ
Π§Π°ΡΡΡ 4. Nimble: Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ²ΠΎΠΉ Query ΠΈ Handler Π΄Π»Ρ IMediator
ΠΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ 2 (ΠΏΠ»Π΅ΠΉ-Π»ΠΈΡΡ)
ΠΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ (ΠΏΠ»Π΅ΠΉ-Π»ΠΈΡΡ)
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈ Π² Visual Studio Marketplace
ΠΠΎΡΠΌΠΎΡΡΠ΅ΡΡ marketplace
Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΡΡΠΌΠΎ ΠΈΠ· Visual Studio
ΠΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ: Nimble Framework v.2
Nimble: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°
Nimble Framework Π΄Π»Ρ NET6 ΠΠΎΡΠΎΠ²ΠΈΡΡΡ
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠΌΠΎΡΡ ΠΊΠ°Π½Π°Π»Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ (Support This Project):
ΠΠΈΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° ΡΠ°ΠΉΡΠ΅ www.calabonga.net
Π‘Π΅ΡΠ³Π΅ΠΉ ΠΠ°Π»Π°Π±ΠΎΠ½Π³Π° (Calabonga)