هذا هو قالب يهدف إلى إعداد تطبيق واجهة برمجة تطبيقات الويب التي تم تنفيذها بالكامل باستخدام .NET 7 .
سجلات قابلة للتخصيص بالكامل والآلي التي تغير الملفات على فاصل يومي لقدرة القراءة.
تحرير القيم في ملف appsettings.json لتخصيص.
خدمات الإصدار
بيانات اعتماد المستخدم
التحقق من كلمة المرور القابلة للتخصيص
تحرير القيم في ملف appsettings.json لتخصيص.
التحقق من صحة البريد الإلكتروني
التحقق من اسم المستخدم
مصادقة JWT
ترخيص قائم على الأدوار
حسابات المشرف والأعضاء
خدمات المشرف فقط
حساب مستخدم المسؤول الافتراضي
تحرير القيم في ملف appsettings.json لتخصيص.
قاعدة البيانات جاهزة
⬆ العودة إلى جدول المحتويات
⬆ العودة إلى جدول المحتويات
استنساخ المستودع
فتح محطة في مجلد القالب
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 run⬆ العودة إلى جدول المحتويات
هناك نظامان لإدارة قواعد البيانات التي سأقوم بتضمينها.
بالطبع ، هناك المزيد ولكن هؤلاء هم أكثر ما عملت معهم.
لمزيد من مزودي البيانات ، تفضل بزيارة الوثائق الرسمية EF Core.
تثبيت حزمة موصل إطار العمل.
dotnet add package Microsoft.EntityFrameworkCore.SqlServerقم بتغيير سلسلة الاتصال في appsettings.json إلى شيء من هذا القبيل:
{
"ConnectionStrings" : {
"Demo" : " Server=<SERVER_NAME>;Database=<DATABASE_NAME>;Trusted_Connection=true;MultipleActiveResultSets=true;Trust Server Certificate=true "
},
...
} تعديل خدمة ApplicationDbContext لاستخدام SQL Server .
يتم ذلك داخل البرنامج .
builder . Services . AddDbContext < ApplicationDbContext > ( options =>
options . UseSqlServer ( builder . Configuration . GetConnectionString ( "Demo" ) )
) ;تثبيت حزمة موصل إطار العمل.
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQLقم بتغيير سلسلة الاتصال في appsettings.json إلى شيء من هذا القبيل:
{
"ConnectionStrings" : {
"Demo" : " Host=localhost:5432;Database=<DATABASE>;Username=<USERNAME> "
},
...
} تعديل خدمة ApplicationDbContext لاستخدام postgreSQL .
يتم ذلك داخل البرنامج .
builder . Services . AddDbContext < ApplicationDbContext > ( options =>
options . UseNpgsql ( builder . Configuration . GetConnectionString ( "Demo" ) )
) ;يتطلب PostgreSQL بعض الخطوات الإضافية لهذا الحل لتشغيله.
قم بتغيير خاصية Is_Deleted من فئة IndexedObject لأن DBMs لا تدعم نوع bit .
[ Required ]
[ Column ( "Is_Deleted" ) ]
[ JsonIgnore ]
public bool IsDeleted { get ; set ; } = false ;أضف ما يلي داخل البرنامج مباشرة بعد رمز الخطوة 3.
AppContext . SetSwitch ( "Npgsql.EnableLegacyTimestampBehavior" , true ) ;
AppContext . SetSwitch ( "Npgsql.DisableDateTimeInfinityConversions" , true ) ;هذا ضروري لـ Postgre لدعم خصائص
DateTimeالخاصة بنا.
⬆ العودة إلى جدول المحتويات
يتم تعريف أدوار المستخدم في مكانين للعمل:
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 ) ;
}هذه خدمة يمكن استخدامها من قبل أي مستخدم.
تذكر أنها لا تزال غير خدمة عامة ويجب تسجيل الدخول لاستخدامها. إنه مجرد عدم الحاجة إلى دور خاص.
Inside Appsettings.Json ، هناك بيانات اعتماد المسؤول الافتراضي والمعلومات المهمة.
يستخدم التطبيق هذه المعلومات لإنشاء المستخدم تلقائيًا على إنشاء قاعدة البيانات.
يتم الإعلان عن البيانات في شكل JSON التالي:
"DefaultAdmin" : {
"Email" : " [email protected] " ,
"UserName" : " admin_user " ,
"FirstName" : " Admin " ,
"LastName" : " User " ,
"Password" : " 123 "
}يوصى بتغيير البريد الإلكتروني وكلمة المرور على الأقل قبل المتابعة.
⬆ العودة إلى جدول المحتويات
التحقق من صحة اسم المستخدم بسيط ولكنه مصحوب.
أسماء المستخدمين:
_- لإرجاع القائمة الكاملة للقواعد ووضع علامة على القواعد غير الصالحة ، يتم إرجاع الرسالة المنسقة كعلامة 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 ، فسيتعين على المستخدم استخدام رقم واحد على الأقل ( [0-9] ) لكلمة مروره.
لعدم فرض هذه القاعدة ، حدد قيمتها على
false.
هذا هو متغير Boolean .
إذا تم ضبطه على TRUE ، فسيتعين على المستخدم استخدام حرف صغير واحد على الأقل لكلمة المرور الخاصة بهم.
لعدم فرض هذه القاعدة ، حدد قيمتها على
false.
هذا هو متغير Boolean .
إذا تم ضبطه على TRUE ، فسيتعين على المستخدم استخدام ما لا يقل عن شخص واحد من الأحرف غير الرقمية المسموح بها لكلمة مروره.
لعدم فرض هذه القاعدة ، حدد قيمتها على
false.
هذا هو متغير Boolean .
إذا تم ضبطه على TRUE ، فسيتعين على المستخدم استخدام حرف كبير واحد على الأقل لكلمة مروره.
لعدم فرض هذه القاعدة ، حدد قيمتها على
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 >في المثال أعلاه ، كانت كلمة المرور صالحة تقريبًا ولكنها:
- تحتوي
- كان قصير جدا.
لتحرير التحقق من صحة كلمة المرور ، يجب عليك (مايو) القيام 3 أشياء:
قم بتحرير القواعد داخل ملف Appsettings.json .
قم بتحرير فئة PasswordValidator لمطابقة تلك القواعد.
إذا قمت فقط بتغيير قيم القواعد الحالية ، فلا داعي لها.
قم بتحرير منطق التحقق من الصحة المعلن كجزء من واجهة IPasswordUtils داخل فئة التنفيذ المقدمة أو عن طريق إنشاء خاص بك.
إذا قمت فقط بتغيير قيم القواعد الحالية ، فلا داعي لها.
⬆ العودة إلى جدول المحتويات
لإلغاء تثبيت القالب ، ما يلي ببساطة:
فتح محطة في مجلد القالب
cd webapi-fullقم بإلغاء تثبيت القالب عن طريق الجري:
لنظام التشغيل Windows
dotnet new uninstall .ل macos / linux
dotnet new uninstall ./⬆ العودة إلى جدول المحتويات
Dotnet-Template-Webapi-Full مرخصة بموجب ترخيص GNU العام الإصدار 3.0.
⬆ العودة إلى جدول المحتويات