이는 .NET 7 사용하여 완전히 구현 된 웹 API 응용 프로그램을 설정하기위한 템플릿입니다.
가독성을 위해 매일 간격으로 파일을 변경하는 완전히 사용자 정의 할 수 있고 자동화 된 로그.
AppSettings.json 파일의 값을 개인화하려면 값을 편집합니다.
버전 서비스
사용자 자격 증명 유효성 검사
사용자 정의 가능한 비밀번호 유효성 검증
AppSettings.json 파일의 값을 개인화하려면 값을 편집합니다.
이메일 검증
사용자 이름 유효성 검사
JWT 인증
역할 기반 승인
관리자 및 회원 계정
관리자 전용 서비스
기본 관리자 사용자 계정
AppSettings.json 파일의 값을 개인화하려면 값을 편집합니다.
데이터베이스 준비
contents 목차로 돌아갑니다
contents 목차로 돌아갑니다
저장소를 복제하십시오
Template의 폴더로 터미널을 엽니 다
cd webapi-full프로젝트 생성에 사용할 템플릿을 설치하십시오
Windows의 경우
dotnet new install .MacOS / Linux의 경우
dotnet new install ./업데이트 된 버전을 설치하려면 하나의 버전을 제거해야 할 수도 있습니다.
이러한 불편을 피하려면 위 명령에
--force옵션을 추가하십시오.
프로젝트를 만듭니다
dotnet new webapi-full이 명령을 프로젝트 폴더로 사용 하므로이 명령을 빈 디렉토리로 실행해야합니다.
원하는대로 디렉토리의 이름을 지정하십시오. 프로젝트의 네임 스페이스는 해당 이름을 상속합니다.
마이그레이션을 추가하고 데이터베이스를 만듭니다
dotnet ef migrations add CreateUser그리고
dotnet ef database update엔티티 프레임 워크가 설치되지 않은 경우 다음을 먼저 실행하십시오.
dotnet tool install --global dotnet-ef
프로젝트를 실행하고 Swagger를 사용해보십시오
dotnet watch runcontents 목차로 돌아갑니다
내가 포함 할 2 개의 데이터베이스 관리 시스템이 있습니다.
물론, 더 많은 것이 있지만 이것들은 내가 가장 많이 일한 것들입니다.
더 많은 데이터 제공 업체를 보려면 공식 EF 핵심 문서를 방문하십시오.
엔티티 프레임 워크 커넥터 패키지를 설치하십시오.
dotnet add package Microsoft.EntityFrameworkCore.SqlServerAppSettings.json 의 연결 문자열을 다음과 같은 것으로 변경하십시오.
{
"ConnectionStrings" : {
"Demo" : " Server=<SERVER_NAME>;Database=<DATABASE_NAME>;Trusted_Connection=true;MultipleActiveResultSets=true;Trust Server Certificate=true "
},
...
} SQL Server를 사용하려면 ApplicationDbContext 서비스를 수정하십시오.
이것은 program.cs 내부에서 수행됩니다.
builder . Services . AddDbContext < ApplicationDbContext > ( options =>
options . UseSqlServer ( builder . Configuration . GetConnectionString ( "Demo" ) )
) ;엔티티 프레임 워크 커넥터 패키지를 설치하십시오.
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQLAppSettings.json 의 연결 문자열을 다음과 같은 것으로 변경하십시오.
{
"ConnectionStrings" : {
"Demo" : " Host=localhost:5432;Database=<DATABASE>;Username=<USERNAME> "
},
...
} PostgreSQL을 사용하려면 ApplicationDbContext 서비스를 수정하십시오.
이것은 program.cs 내부에서 수행됩니다.
builder . Services . AddDbContext < ApplicationDbContext > ( options =>
options . UseNpgsql ( builder . Configuration . GetConnectionString ( "Demo" ) )
) ;PostgreSQL 은이 솔루션을 실행하려면 몇 가지 추가 단계가 필요합니다.
이 dbms가 bit 유형을 지원하지 않으므로 클래스 IndexedObject 의 Is_Deleted 속성을 변경하십시오.
[ Required ]
[ Column ( "Is_Deleted" ) ]
[ JsonIgnore ]
public bool IsDeleted { get ; set ; } = false ;3 단계 코드 직후에 다음 내부 프로그램을 추가하십시오.
AppContext . SetSwitch ( "Npgsql.EnableLegacyTimestampBehavior" , true ) ;
AppContext . SetSwitch ( "Npgsql.DisableDateTimeInfinityConversions" , true ) ;PostGre 가
DateTime속성을 지원하는 데 필수적입니다.
contents 목차로 돌아갑니다
사용자 역할은 앱이 작동하기 위해 2 개의 장소로 정의됩니다.
Role 열거
이 열거는 앱의 사용 가능한 역할과 각 역할의 지수를 보유합니다.
이 인덱스는 앱의 기능에 중요하며 간단한 방식으로 작동합니다. 색인이 높을수록 역할의 특권이 높아집니다.
기본 열거는 다음 값을 보유합니다.
{
"User" : 1 ,
"Admin" : 2
}관리자는 지수가 높을수록 우수한 역할을합니다.
inside program.cs는 열거 값을 앱에서 사용하는 " 정책 "으로 변환합니다.
builder . Services . AddAuthorization ( options =>
{
options . AddPolicy ( "admin" , policy => policy . Requirements . Add ( new RoleRequirement ( Role . Admin ) ) ) ;
options . AddPolicy ( "user" , policy => policy . Requirements . Add ( new RoleRequirement ( Role . User ) ) ) ;
} ) ;열거적 인 역할을 추가 한 후에도 여기에 추가되어야합니다.
사용자에 대한 서비스를 인증하려면 [Authorize] 속성을 간단하게 추가하십시오.
승인이 일할 수 있도록 역할이 선언되는 것이 중요합니다.
[ Authorize ( Policy = "user" ) ]
[ HttpGet ]
public IActionResult GetLoggedUser ( )
{
User user = this . userUtils . GetLoggedUser ( this . User ) ;
Log . Information ( $ "Retrieved user ' { user . UserName } '." ) ;
return Ok ( user ) ;
}이것은 모든 사용자가 사용할 수있는 서비스입니다.
여전히 공공 서비스가 아니며 사용하려면 로그인해야합니다. 특별한 역할이 필요하지 않습니다.
appsettings.json 내부에는 기본 관리자의 자격 증명과 중요한 정보가 있습니다.
응용 프로그램은이 정보를 사용하여 데이터베이스 생성에서 사용자를 자동으로 작성합니다.
데이터는 다음 JSON의 형태로 선언됩니다.
"DefaultAdmin" : {
"Email" : " [email protected] " ,
"UserName" : " admin_user " ,
"FirstName" : " Admin " ,
"LastName" : " User " ,
"Password" : " 123 "
}진행하기 전에 최소한 이메일과 비밀번호를 변경하는 것이 좋습니다 .
contents 목차로 돌아갑니다
사용자 이름 유효성 검사는 간단하지만 의견이 있습니다.
사용자 이름 :
_- 전체 규칙 목록을 반환하고 유효하지 않은 규칙 목록을 표시하려면 형식화 된 메시지가 HTML <ul></ul> 태그로 반환됩니다.
보다 구체적으로, 다음은 실패한 검증의 예입니다.
< ul class =' username-validation ' >
< li class =' valid ' > Username cannot contain whitespaces. </ li >
< li class =' invalid ' > Username cannot exceed 40 characters. </ li >
< li class =' valid ' > Username must be at least 6 characters long. </ li >
< li class =' valid ' > The only allowed special characters are the following: -, _ </ li >
< li class =' valid ' > Username must be lowercase. </ li >
</ ul >이 유효성 검사기를 편집하려면 규칙이 하드 코딩되었으므로 코드를 편집해야합니다. 이것은 표준에 따른 사용자 이름 유효성 검사로 인해 발생했습니다.
위의 예에서, 최대 40자를 시행하는 것을 제외한 모든 유효성 검사기는 통과했습니다.
이메일 검증은 매우 간단합니다.
사용자가 제공 한 모든 주소는 형식을 고수하는 한 유효합니다.
이 유효성 검사기를 변경하는 데 아무런 의미가 없지만 코드에서 자유롭게 할 수 있습니다.
ValidateEmail및ValidateUserName메소드는 모두IUserUtils인터페이스의 일부로 정의됩니다.
암호 검증은 가장 복잡하고 쉽게 사용자 정의 할 수 있으므로 해당 규칙이 AppSettings.json 파일에 정의됩니다.
앱 세대에서는 앞에서 언급 한 파일 에서이 부분을 찾을 수 있습니다.
"PasswordValidator" : {
"AllowedNonAlphanumeric" : " !@#$._- " ,
"MaxLength" : 16 ,
"MinLength" : 8 ,
"RequireDigit" : false ,
"RequireLowercase" : true ,
"RequireNonAlphanumeric" : true ,
"RequireUppercase" : true
},이것이하는 일은 다음과 같습니다.
이 규칙은 암호 문자열에 허용되는 허용되지 않은 비 성격 문자를 설정합니다.
캐릭터는 아무것도 분리해서는 안됩니다. JSON 스트링에 모두 넣으십시오.
비 알파럼을 허용하지 않으려면 값을 빈 문자열로 만듭니다.
최대 길이는 그 이름이 의미하는 바를 수행합니다.
숫자로 설정하면 비밀번호 문자열의 길이가 많은 문자를 초과 할 수 없습니다.
비밀번호의 최대 길이를 시행하지 않으려면 값을 0으로 설정하십시오.
최대 길이의 상대와 같이 작동합니다.
비밀번호는이 필드의 숫자보다 문자가 적을 수 없습니다.
비밀번호의 최소 길이를 시행하지 않으려면 값을 0으로 설정하십시오.
이것은 Boolean 변수입니다.
true로 설정되면 사용자는 암호에 적어도 1 자리 ( [0-9] )를 사용해야합니다.
이 규칙을 시행하지 않으려면 그 값을
false로 설정하십시오.
이것은 Boolean 변수입니다.
true로 설정되면 사용자는 암호에 1 개 이상의 소문자를 사용해야합니다.
이 규칙을 시행하지 않으려면 그 값을
false로 설정하십시오.
이것은 Boolean 변수입니다.
true로 설정되면 사용자는 암호에 허용되지 않은 비 alphanumeric 문자 중 하나 이상을 사용해야합니다.
이 규칙을 시행하지 않으려면 그 값을
false로 설정하십시오.
이것은 Boolean 변수입니다.
true로 설정되면 사용자는 암호에 최소 1 개의 대문자를 사용해야합니다.
이 규칙을 시행하지 않으려면 그 값을
false로 설정하십시오.
또한 기본적으로 암호에는 공백 문자가 포함될 수 없습니다.
전체 규칙 목록을 반환하고 유효하지 않은 규칙 목록을 표시하려면 형식화 된 메시지가 HTML <ul></ul> 태그로 반환됩니다.
보다 구체적으로, 다음은 실패한 검증의 예입니다.
< ul class =' password-validation ' >
< li class =' valid ' > Password cannot contain whitespaces. </ li >
< li class =' invalid ' > The only allowed special characters are the following: !, @, #, $, ., _, - </ li >
< li class =' valid ' > Password cannot exceed 16 characters. </ li >
< li class =' invalid ' > Password must be at least 8 characters long. </ li >
< li class =' valid ' > Password must contain at least one digit. </ li >
< li class =' valid ' > Password must contain at least one lowercase letter. </ li >
</ ul >위의 예에서는 비밀번호가 거의 유효했지만 다음과 같습니다.
- 허용되지 않은 비 알파럼 성 특성이 포함되어 있습니다
- 너무 짧았습니다.
비밀번호 유효성 검사를 편집하려면 (5 월)는 3 가지를 수행해야합니다.
AppSettings.json 파일 내부의 규칙을 편집하십시오.
해당 규칙에 맞게 PasswordValidator 클래스를 편집하십시오.
기존 규칙의 값 만 변경하면 필요하지 않습니다.
제공된 구현 클래스 내부의 IPasswordUtils 인터페이스의 일부로 선언 된 유효성 검사의 논리를 편집하거나 자신의 직접 생성합니다.
기존 규칙의 값 만 변경하면 필요하지 않습니다.
contents 목차로 돌아갑니다
템플릿을 제거하려면 다음을 수행하기 만하면됩니다.
Template의 폴더로 터미널을 엽니 다
cd webapi-full실행하여 템플릿을 제거하십시오.
Windows의 경우
dotnet new uninstall .MacOS / Linux의 경우
dotnet new uninstall ./contents 목차로 돌아갑니다
Dotnet-Template-Webapi-Full은 GNU General Public License v3.0에 따라 라이센스가 부여됩니다.
contents 목차로 돌아갑니다