Ini adalah templat yang dimaksudkan untuk mengatur aplikasi API Web yang diimplementasikan sepenuhnya menggunakan .NET 7 .
Log yang sepenuhnya dapat disesuaikan dan otomatis yang mengubah file pada interval harian untuk keterbacaan.
Edit nilai di file appsettings.json untuk dipersonalisasi.
Layanan versi
Validasi Kredensial Pengguna
Validasi kata sandi yang dapat disesuaikan
Edit nilai di file appsettings.json untuk dipersonalisasi.
Validasi email
Validasi Nama Pengguna
Otentikasi JWT
Otorisasi Berbasis Peran
Akun Admin dan Anggota
Layanan admin saja
Akun Pengguna Admin Default
Edit nilai di file appsettings.json untuk dipersonalisasi.
Siap basis data
⬆ Kembali ke Daftar Isi
⬆ Kembali ke Daftar Isi
Klon Repositori
Buka Terminal ke Folder Template
cd webapi-fullInstal template yang akan digunakan untuk pembuatan proyek
Untuk windows
dotnet new install .Untuk macOS / linux
dotnet new install ./Anda mungkin perlu menghapus satu versi untuk menginstal versi yang diperbarui.
Untuk menghindari ketidaknyamanan ini, cukup tambahkan opsi
--forcepada perintah di atas.
Buat proyek
dotnet new webapi-fullIngatlah untuk menjalankan perintah ini ke direktori kosong karena akan digunakan sebagai folder proyek.
Beri nama direktori yang Anda suka, namespace proyek akan mewarisi nama itu.
Tambahkan migrasi dan buat database
dotnet ef migrations add CreateUserDan
dotnet ef database updateJika Anda tidak menginstal kerangka kerja entitas, jalankan yang berikut:
dotnet tool install --global dotnet-ef
Jalankan proyek dan cobalah menggunakan kesombongan
dotnet watch run⬆ Kembali ke Daftar Isi
Ada 2 sistem manajemen basis data yang akan saya sertakan.
Tentu saja, ada lebih banyak tetapi ini adalah yang paling banyak bekerja dengan saya.
Untuk lebih banyak penyedia data , kunjungi dokumentasi EF Core Resmi.
Instal Paket Konektor Entity Framework.
dotnet add package Microsoft.EntityFrameworkCore.SqlServerUbah string koneksi di appsettings.json menjadi sesuatu seperti ini:
{
"ConnectionStrings" : {
"Demo" : " Server=<SERVER_NAME>;Database=<DATABASE_NAME>;Trusted_Connection=true;MultipleActiveResultSets=true;Trust Server Certificate=true "
},
...
} Ubah Layanan ApplicationDbContext Anda untuk menggunakan SQL Server .
Ini dilakukan di dalam program.cs .
builder . Services . AddDbContext < ApplicationDbContext > ( options =>
options . UseSqlServer ( builder . Configuration . GetConnectionString ( "Demo" ) )
) ;Instal Paket Konektor Entity Framework.
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQLUbah string koneksi di appsettings.json menjadi sesuatu seperti ini:
{
"ConnectionStrings" : {
"Demo" : " Host=localhost:5432;Database=<DATABASE>;Username=<USERNAME> "
},
...
} Ubah Layanan ApplicationDbContext Anda untuk menggunakan PostgreSQL .
Ini dilakukan di dalam program.cs .
builder . Services . AddDbContext < ApplicationDbContext > ( options =>
options . UseNpgsql ( builder . Configuration . GetConnectionString ( "Demo" ) )
) ;PostgreSQL membutuhkan beberapa langkah tambahan untuk menjalankan solusi ini.
Ubah properti Is_Deleted dari Class IndexedObject karena DBMS ini tidak mendukung tipe bit .
[ Required ]
[ Column ( "Is_Deleted" ) ]
[ JsonIgnore ]
public bool IsDeleted { get ; set ; } = false ;Tambahkan Program Inside berikut ini tepat setelah Kode Langkah 3.
AppContext . SetSwitch ( "Npgsql.EnableLegacyTimestampBehavior" , true ) ;
AppContext . SetSwitch ( "Npgsql.DisableDateTimeInfinityConversions" , true ) ;Ini penting bagi Postgre untuk mendukung properti
DateTimekami.
⬆ Kembali ke Daftar Isi
Peran pengguna didefinisikan di 2 tempat agar aplikasi berfungsi:
Role enum
Enum ini memiliki peran aplikasi yang tersedia serta indeks masing -masing peran.
Indeks ini penting untuk fungsionalitas aplikasi dan berfungsi secara sederhana: semakin tinggi indeks, semakin istimewa peran tersebut.
Enum default memegang nilai -nilai berikut:
{
"User" : 1 ,
"Admin" : 2
}Perhatikan bahwa admin memiliki indeks yang lebih tinggi karena itu adalah peran yang unggul.
Di dalam program.cs untuk menerjemahkan nilai -nilai enum menjadi " kebijakan " yang digunakan oleh aplikasi.
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 ) ) ) ;
} ) ;Setelah menambahkan peran ke enum, wajib juga menambahkannya di sini.
Untuk mengotentikasi layanan apa pun untuk pengguna, sederhana tambahkan atribut [Authorize] .
Penting bahwa peran tersebut dinyatakan juga agar otorisasi bekerja.
[ Authorize ( Policy = "user" ) ]
[ HttpGet ]
public IActionResult GetLoggedUser ( )
{
User user = this . userUtils . GetLoggedUser ( this . User ) ;
Log . Information ( $ "Retrieved user ' { user . UserName } '." ) ;
return Ok ( user ) ;
}Ini adalah layanan yang dapat digunakan oleh pengguna mana pun.
Ingatlah bahwa itu masih bukan layanan publik dan Anda harus masuk untuk menggunakannya. Hanya saja tidak ada peran khusus yang diperlukan.
Di dalam appsettings.json , ada kredensial administrator default dan informasi penting.
Aplikasi menggunakan informasi ini untuk secara otomatis membuat pengguna pada pembuatan database.
Data dinyatakan dalam bentuk JSON berikut:
"DefaultAdmin" : {
"Email" : " [email protected] " ,
"UserName" : " admin_user " ,
"FirstName" : " Admin " ,
"LastName" : " User " ,
"Password" : " 123 "
}Dianjurkan agar Anda mengubah setidaknya email dan kata sandi sebelum melanjutkan.
⬆ Kembali ke Daftar Isi
Validasi nama pengguna sederhana tetapi opini.
Nama pengguna:
_- Untuk mengembalikan seluruh daftar aturan dan tandai yang tidak valid, pesan yang diformat dikembalikan sebagai tag HTML <ul></ul> .
Lebih khusus lagi, berikut adalah contoh validasi yang gagal:
< 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 >Untuk mengedit validator ini, Anda harus mengedit kode karena aturannya hardcoded. Ini terjadi karena validasi nama pengguna mengikuti standar.
Dalam contoh di atas, semua validator lulus kecuali untuk yang menegakkan panjang maksimum 40 karakter.
Validasi email cukup mudah.
Semua alamat yang disediakan oleh pengguna valid selama mereka tetap pada format.
Saya tidak melihat gunanya mengubah validator ini tetapi Anda bebas melakukannya dalam kode Anda.
Metode
ValidateEmaildanValidateUserNamedidefinisikan sebagai bagian dari antarmukaIUserUtils.
Validasi kata sandi adalah yang paling kompleks dan mudah disesuaikan sehingga aturannya didefinisikan dalam file appsettings.json .
Pada generasi aplikasi, Anda akan menemukan bagian ini dalam file yang disebutkan sebelumnya:
"PasswordValidator" : {
"AllowedNonAlphanumeric" : " !@#$._- " ,
"MaxLength" : 16 ,
"MinLength" : 8 ,
"RequireDigit" : false ,
"RequireLowercase" : true ,
"RequireNonAlphanumeric" : true ,
"RequireUppercase" : true
},Apa yang dilakukannya adalah:
Aturan ini menetapkan karakter non-alfanumerik yang diizinkan yang diizinkan oleh kata sandi.
Karakter tidak boleh dipisahkan oleh apa pun. Taruh saja semuanya di string JSON.
Untuk tidak mengizinkan non-alfanumerik, buat nilainya string kosong.
Panjang maksimal melakukan apa yang disiratkan namanya.
Jika Anda mengaturnya ke angka, string kata sandi tidak dapat melebihi banyak karakter yang panjangnya.
Untuk berhenti menegakkan panjang maksimum untuk kata sandi, atur nilainya ke 0.
Bekerja seperti rekan panjang maksimumnya.
Kata sandi tidak dapat memiliki karakter yang lebih sedikit daripada angka yang ditetapkan untuk bidang ini.
Untuk berhenti menegakkan panjang minimum untuk kata sandi, atur nilainya ke 0.
Ini adalah variabel Boolean .
Jika diatur ke True, pengguna harus menggunakan setidaknya 1 digit ( [0-9] ) untuk kata sandi mereka.
Untuk tidak menegakkan aturan ini, atur nilainya menjadi
false.
Ini adalah variabel Boolean .
Jika diatur ke True, pengguna harus menggunakan setidaknya 1 huruf kecil untuk kata sandi mereka.
Untuk tidak menegakkan aturan ini, atur nilainya menjadi
false.
Ini adalah variabel Boolean .
Jika diatur ke True, pengguna harus menggunakan setidaknya 1 dari karakter non-alfanumerik yang diizinkan untuk kata sandi mereka.
Untuk tidak menegakkan aturan ini, atur nilainya menjadi
false.
Ini adalah variabel Boolean .
Jika diatur ke True, pengguna harus menggunakan setidaknya 1 huruf besar untuk kata sandi mereka.
Untuk tidak menegakkan aturan ini, atur nilainya menjadi
false.
Juga, secara default, kata sandi tidak dapat berisi karakter spasi putih.
Untuk mengembalikan seluruh daftar aturan dan tandai yang tidak valid, pesan yang diformat dikembalikan sebagai tag HTML <ul></ul> .
Lebih khusus lagi, berikut adalah contoh validasi yang gagal:
< 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 >Dalam contoh di atas, kata sandi hampir valid tetapi itu:
- berisi karakter non-alfanumerik yang tidak diizinkan dan
- terlalu pendek.
Untuk mengedit validasi kata sandi, Anda (mungkin) harus melakukan 3 hal:
Edit aturan di dalam file appsettings.json .
Edit kelas PasswordValidator untuk mencocokkan aturan tersebut.
Jika Anda hanya mengubah nilai -nilai aturan yang ada, tidak perlu untuk itu.
Edit logika validasi yang dinyatakan sebagai bagian dari antarmuka IPasswordUtils di dalam kelas implementasi yang disediakan atau dengan membuat sendiri.
Jika Anda hanya mengubah nilai -nilai aturan yang ada, tidak perlu untuk itu.
⬆ Kembali ke Daftar Isi
Untuk menghapus instalan templat, cukup lakukan hal berikut:
Buka Terminal ke Folder Template
cd webapi-fullHapus instalan templat dengan menjalankan:
Untuk windows
dotnet new uninstall .Untuk macOS / linux
dotnet new uninstall ./⬆ Kembali ke Daftar Isi
Dotnet-Template-Webapi-Full dilisensikan berdasarkan GNU Umum Lisensi Publik v3.0.
⬆ Kembali ke Daftar Isi