در این قسمت قصد داریم ساختار مقدماتی مثال این سری را که لیستی از تصاویر آپلود شدهی توسط کاربران مختلف را نمایش میدهد، بدون افزودن مباحث امنیتی و سطوح دسترسی کاربران وارد شدهی به سیستم، تشکیل دهیم. در قسمتهای بعدی، به تدریج آنرا با قابلیتهای مختلف IdentityServer 4x یکپارچه خواهیم کرد. در اینجا فرض بر این است که حداقل
SDK نگارش 2.1.401 را پیشتر نصب کردهاید.
بررسی ساختار WebAPI مقدماتی مثال این سری
این پروژهی مقدماتی که هنوز قسمتهای اعتبارسنجی به آن اضافه نشدهاند، از دو قسمت WebApi و MvcClient تشکیل میشود.
کار قسمت WebApi، ارائهی یک Restful-API برای کار با گالری تصاویر است. برای اجرای آن وارد پوشهی src\WebApi\ImageGallery.WebApi.WebApp شده و ابتدا فایل restore.bat و سپس dotnet_run.bat را اجرا کنید.
در این حالت برنامه بر روی پورت 7001 در دسترس خواهد بود:
این پورت نیز در فایل
Properties\launchSettings.json تنظیم شدهاست تا با پورت کلاینت MVC تهیه شده، تداخل نکند.
کار این سرویس، ارائهی
ImagesController است که توسط آن میتوان لیستی از تصاویر موجود، اطلاعات یک تصویر و همچنین کار ثبت، ویرایش و حذف تصاویر را انجام داد.
در این Solution، رکوردهای تصاویری که در بانک اطلاعاتی ذخیره میشوند، یک چنین ساختاری را دارند:
using System;
using System.ComponentModel.DataAnnotations;
namespace ImageGallery.WebApi.DomainClasses
{
public class Image
{
[Key]
public Guid Id { get; set; }
[Required]
[MaxLength(150)]
public string Title { get; set; }
[Required]
[MaxLength(200)]
public string FileName { get; set; }
[Required]
[MaxLength(50)]
public string OwnerId { get; set; }
}
}
همانطور که ملاحظه میکنید در اینجا OwnerId نیز در نظر گرفته شدهاست تا بتوان پس از اعمال مباحث اعتبارسنجی، تصاویر را از کاربری خاص دریافت و همچنین صرفا تصاویر متعلق به او را به آن کاربر خاص نمایش داد.
در این قسمت توسط کلاس
ImageConfiguration کار مقدار دهی اولیهی بانک اطلاعاتی به کمک متد HasData مربوط به EF Core 2.1 صورت گرفتهاست و به این ترتیب میتوان برنامه را برای نمایش مقدماتی جاری، بدون داشتن سیستم اعتبارسنجی و مفاهیم کاربران، نمایش داد.
این قسمت از Solution، به نحو زیر تشکیل شدهاست:
- ImageGallery.WebApi.DataLayer
در اینجا کار تشکیل DbContext برنامه و همچنین مقدار دهی اولیهی بانک اطلاعاتی و تنظیمات Migrations قرار گرفتهاند.
- ImageGallery.WebApi.DomainClasses
در این پروژه کلاسهای موجودیتهای متناظر با جداول بانک اطلاعاتی قرار میگیرند.
- ImageGallery.WebApi.Mappings
این پروژه کار تهیه نگاشتهای AutoMapper برنامه را انجام میدهد؛ نگاشتهایی بین Models و DomainClasses که در ImagesController از آنها استفاده میشود.
- ImageGallery.WebApi.Models
در این پروژه همان DTO's پروژه قرار گرفتهاند. جهت رعایت مسایل امنیتی نباید کلاس موجودیت Image فوق را مستقیما در معرض دید API عمومی قرار داد. به همین جهت تعدادی Model در اینجا تعریف شدهاند که هم برای ثبت، ویرایش و حذف اطلاعات بکار میروند و هم جهت گزارشگیری از رکوردهای موجود جدول تصاویر.
- ImageGallery.WebApi.Services
در این پروژه کار با DbContext انجام شده و توسط آن اطلاعات تصاویر به بانک اطلاعاتی اضافه شده و یا واکشی میشوند.
- ImageGallery.WebApi.WebApp
این پروژه، همان پروژهی اصلی است که سایر قسمتهای یاد شده را در کنار هم قرار داده و به صورت یک Restful-API ارائه میدهد.
بررسی ساختار MvcClient مقدماتی مثال این سری
پس از اجرای WebAPI و آماده بودن آن جهت استفاده، اکنون یک کلاینت ASP.NET Core MVC را جهت کار با امکانات ImagesController آن، تدارک دیدهایم.
برای اجرای آن وارد پوشهی src\MvcClient\ImageGallery.MvcClient.WebApp شده و ابتدا فایل restore.bat و سپس dotnet_run.bat را اجرا کنید.
در این حالت برنامه بر روی پورت 5001 در دسترس خواهد بود:
این پورت نیز در فایل
Properties\launchSettings.json تنظیم شدهاست.
در اینجا نمایی از اجرای این برنامه را مشاهده میکنید که لیستی از تصاویر را توسط
GalleryController، از سرویس ImagesController مربوط به WebAPI، دریافت کرده و سپس نمایش میدهد. در این لیست تصاویر تمام کاربران با هم نمایش داده شدهاند و هنوز امکان فیلتر کردن آنها بر اساس کاربران وارد شدهی به سیستم را نداریم که در قسمتهای بعدی آنها را تکمیل خواهیم کرد.
این قسمت از Solution به نحو زیر تشکیل شدهاست:
- ImageGallery.MvcClient.Services
در اینجا یک
Typed HTTP Client مخصوص NET Core 2.1. را تهیه کردهایم. این سرویس جهت دسترسی به آدرس https://localhost:7001 که WebAPI برنامه در آن قرار دارد، تشکیل شدهاست. روش ثبت مخصوص آنرا نیز در فایل آغازین پروژهی MvcClient.WebApp توسط متد
services.AddHttpClient ملاحظه میکنید.
- ImageGallery.MvcClient.ViewModels
مدلهای متناظر با ساختار Viewهای Razor برنامهی وب، در اینجا قرار میگیرند.
- ImageGallery.MvcClient.WebApp
این پروژه، همان پروژهی اصلی است که سایر قسمتهای یاد شده را در کنار هم قرار داده و به صورت یک برنامهی MVC قابل مرور در مرورگر، ارائه میدهد.
کدهای کامل این قسمت را از اینجا میتوانید دریافت کنید.
برای اجرای آن ابتدا باید پروژهی WebApi.WebApp را اجرا کنید و سپس پروژهی MvcClient.WebApp.