"> ایجاد یک اپلیکیشن NET Core 2.2. به صورت گام به گام | ام اس پی سافت

ایجاد یک اپلیکیشن NET Core 2.2. به صورت گام به گام

اپلیکیشن NET Core 2.2.

در این مقاله میخواهیم راجب ایجاد یک اپلیکیشن NET Core 2.2. به صورت گام به گام صحبت کنیم.تا پایان این مقاله همراه ما باشید.

این مقاله شما را در ایجاد  اپلیکیشن NET Core 2.2. با استفاده از ASP.NET Core 2.2 از ابتدا، با بکارگیری قابلیت های package manager، EF Core، Identity API، Razor Class Library و …، همراهی خواهد کرد.

در عوض پرداختن به مسائل بصورت تئوری، این مقاله بطور عمده بر بخش پیاده سازی تمرکز خواهد کرد.

هرجا که نیاز باشد، کمی از بخش مفهومی آن را نیز مطرح خواهیم کرد.

دانشی مناسب از سی شارپ و دانش کاری طراحی وب و مفاهیم آن.

پیکربندی ماشین

پیکربندی ماشینی که برای این بررسی بکار گرفته شده، Visual Studio 2017 به همراه .NET Core development tools/SDK می باشد.

مطمئن شوید که حداقل NET Core 2.2. را نصب داشته باشید.

خوب است شروع به کار کنیم

پس زمینه بطور کامل تنظیم شده و می توانیم پیش برویم. بیایید با ایجاد برنامه ی خود به شیوه ای گام به گام شروع کنیم.

ایجاد یک اپلیکیشن NET Core 2.2.

بیایید به Visual Studio برویم. به منوی File رفته، New و سپس Project را انتخاب کنید.

با انتخاب Web به عنوان یک دسته بندی، با کادر محاوره ای زیر مواجه خواهید شد،

اپلیکیشن NET Core 2.2.

هنگامی که بر روی OK کلیک کنید، کادر محاوره ای زیر را مشاهده خواهید کرد که در آن می توانید نسخه ی ASP.NET Core انتخاب شده را مجدد تأیید کنید.

به عنوان فرد در حال یادگیری، خوب است که با یک قالب Empty  پیش بروید، چراکه می توان خود مراقب هر کدام و همه ی موارد بود به جای اینکه متکی به کد تولید شده بصورت خودکار باشیم.

Empty را انتخاب کرده و ادامه دهید.

New ASP.NET Core Web Application

هنگامی که پروژه با موفقیت ایجاد شد، می توانید مشاهده کنید که گره ی وابستگی دارای مراجع مورد نیاز اضافه شده بصورت زیر می باشد:

Solution Explorer

در اینجا، بیایید فایل appsettings.json را حذف کنیم، چراکه این فایل را بعدتر ایجاد خواهیم کرد، و پوشه ای جدید به نام wwwroot تحت پروژه اضافه کنیم.

هنگامی که پوشه ی wwwroot ایجاد شد، می توانید مشاهده کنید که آیکن پوشه تغییر کرده است.

این پوشه ای خاص می باشد که تمامی فایل های استاتیک (css، فایل های تصویری، فایل های JavaScript و …) را ذخیره کرده و بطور مستقیم به URL وبسایت نگاشت می شود.

اتصال Middleware و Services

بیایید با کلاس Startup شروع کنیم.

این کلاس دو متد بسیار مهم به نام های ConfigureServices و Configure را نگه می دارد.

هر دوی این متدها بطور خودکار توسط ASP.NET Core فراخوانی می شوند.

با بکارگیری ConfigureServices، می توانیم سرویس ها را با استفاده از IServiceCollection به ظرف تزریق وابستگی اضافه کنیم. بنابراین، بیایید شروع کرده و سرویس MVC را بصورت زیر اضافه کنیم،

 public void ConfigureServices(IServiceCollection services)  
{  
   services.AddMvc();  
}  

بعد از آن متد ConfigureServices است که برای پیکربندی خط لوله ی میان افزاری به همراه کامپوننت هایی که به درخواست های ما رسیدگی خواهند کرد، استفاده می شود.

در اینجا، کد اولیه برای اتصال میان افزار مورد نیاز آورده شده است،

public void Configure(IApplicationBuilder app, IHostingEnvironment env)  
{  
 app.UseDeveloperExceptionPage();  
 app.UseStatusCodePages();  
 app.UseStaticFiles();  
 app.UseMvcWithDefaultRoute();  
} 

لطفا توجه داشته باشید که توالی افزودن میان افزار بسیار حائز اهمیت می باشد.

حال که کارهای ابتدایی برای راه اندازی بنیاد برنامه ی خود را انجام داده ایم، بیایید ادامه داده و دیگر کامپوننت های مفید را نیز راه اندازی کنیم.

ایجاد کلاس های Model و Repository

بیایید با ایجاد یک پوشه ی Models تحت solution با کلاسی به نام Cookie در زیر آن شروع کنیم.

public class Cookie  
{  
    public int Id {get;set; }  
    public string Name { get; set; }  
    public string TinyDescription { get; set; } 
    public string FullDescription { get; set; }  
    public decimal Price { get; set; }  
    public string ImageUrl { get; set; }  
    public bool IsCookieOfTheDay { get; set; }  
}  

حال به سرعت رابطی با نام IRepository تحت همان پوشه با دو متد اولیه بصورت زیر ایجاد کنید،

public interface IRepository  
{  
    IEnumerable<cookie> GetAllCookies();  
    Cookie GetCookieById(int id);  
}  

کار بعدی، ایجاد برخی داده های ساختگی می باشد، که می توانیم از آن ها برای تأیید اینکه آیا برنامه ی ما طبق انتظارات کار می کند یا خیر، استفاده کنیم.

در اینجا، پیاده سازی رابط IRepository آورده شده است.

public class MockRepository : IRepository  
{  
    private List<cookie> _cookies;  
    public MockRepository()  
    {  
        if (_cookies == null)  
        {  
            InitializeRepository();  
        }  
    }  
  
    private void InitializeRepository()  
    {  
        _cookies = new List<cookie>  
        {  
            new Cookie  
            { Id=1,Name="Raspberry", Price=110,   
              TinyDescription="Dark chocolate overloaded",                     
                    FullDescription ="This is one of the best ever   
                    soft and chewy cookie and also been awarded as the   
                    best cookie several times.", IsCookieOfTheDay=false,  
                    ImageUrl ="\\Images\\1.png"},  
                new Cookie{ Id=2, Name="Nuts Overloaded",   
                Price=100, TinyDescription="Truely healthy",  
                    FullDescription ="This cookie is fully loaded   
                    with nuts of various types and contains   
                    nice amount of peanut butter.", IsCookieOfTheDay=true,  
                    ImageUrl ="\\Images\\2.png"},  
                new Cookie{Id=3, Name="Chocolate",  
                Price=70,TinyDescription="Amazingly fruity",  
                    FullDescription ="This cookie is best suited   
                    for the chocolate lovers. It's less sweet and gives   
                    very elegant taste.", IsCookieOfTheDay=false,  
                    ImageUrl ="\\Images\\3.png"},  
                new Cookie{Id=4, Name="Delicious Oatmeal",Price=50,  
                TinyDescription="Truely healthy",  
                    FullDescription ="This is one of the most moist and   
                    flavourful cookie, which can make anyone's mood happy.",   
                    IsCookieOfTheDay=false,  
                    ImageUrl ="\\Images\\4.png"},  
            };  
        }  
          
    public Cookie GetCookie(int id)  
    {  
        return _cookies.FirstOrDefault(x => x.Id == id);  
    }  
  
    public IEnumerable<cookie> GetCookies()  
    {  
        return _cookies;  
    }  
}  

بیایید ادامه دهیم و این IRepository را با ظرف  تزریق وابستگی درون متد ConfigureServices بصورت زیر ثبت کنیم:

services.AddTransientirepository, mockrepository=“”(); // get me new instance every time

افزودن Controller

بیایید یک پوشه ی جدید به نام Controllers تحت پروژه ایجاد کرده و کنترل کننده ای خالی با نام Home درون آن اضافه کنیم.

بطور مختصر، کنترل کننده وظیفه ی ایجاد یک پاسخ بر اساس درخواست کاربر به کمک یک مدل از طریق فراخوانی یک متد را بر عهده دارد.

چنین متدهایی عموما به عنوان متدهای عملیاتی از لحاظ MVC شناخته می شوند.

در ادامه، کد استفاده از IRepository درون کنترل کننده برای گرفتن داده ها از مدل آمده است.

public class HomeController : Controller  
{  
    private readonly IRepository _repository;  
    public HomeController(IRepository repository)  
    {  
        _repository = repository;  
    }  
  
    public IActionResult Index()  
    {  
        return View();  
    }  
}  

افزودن View

تا اینجا، کار ما با Model و Controller تمام شده است.

بنابراین، تنها مورد باقیمانده View است.

در ASP.NET Core 2.2، یک View می تواند دو نوع باشد Regular/Plain view و Strongly-typed view.

اما در اغلب سناریوها، strongly-typed view مورد نیاز است.

در اینجا، از Razor استفاده خواهیم کرد.

بنابراین، بیایید یک پوشه ی جدید به نام Views تحت پروژه به همراه زیرپوشه ای به نام Home ایجاد کنیم.

بر روی پوشه ی Home راست کلیک کرده و آیتم جدید Razor View را اضافه کنید.

با افزودن موفقیت آمیز View، متوجه خواهید شد که فایلی جدید با نام Index.cshtml تحت پوشه ی Home اضافه شده است.

حال، زمان تأیید این است که آیا view و controller به خوبی به یکدیگر پیوند خورده اند و قادر به برقراری ارتباط هستند یا خیر.

به منظور تأیید این امر، بیایید عنوانی به صفحه اضافه کنیم و مقدار این عنوان را از کلاس کنترل کننده با استفاده از ViewBag ارسال خواهیم کرد.

بطور مشابه، برخی اطلاعات در رابطه با کوکی ها را نیز نشان خواهیم داد.

در ادامه، متد بروز شده ی HomeController آورده شده است.

public IActionResult Index()  
{  
    ViewBag.Title = "Cookies and only Cookies";  
    var cookies = _repository.GetAllCookies().OrderByDescending(x=>x.Price);  
    return View(cookies);  
}  

قدم بعد، بروزرسانی view برای خواندن مقدار این عنوان می باشد. کد آن در اینجا آمده است.

IEnumerable

اکنون، اگر برنامه را اجرا کنید، می توانید خروجی زیر را مشاهده کنید،

Cookies and only Cookies

ابتکار عمل در شمول نشانه گذاری HTML

در قطعه کد فوق، دیدیم که نشانه گذاری کامل HTML جهت نمایش یک صفحه نوشته شده است.

اما اگر چندین view داشته باشیم چه؟

آیا این کد HTML را برای هر کدام و همه ی صفحات تکرار خواهیم کرد؟

قطعا خیر. در اینجا الگوبرداری بکار می آید.

می توانیم یک الگو ایجاد کرده و در تمامی viewها به آن الگو ارجاع دهیم.

این کار مقدار کد در viewهای مجزا را نیز کاهش خواهد داد.

واضح است که اگر چیزی قرار باشد بین چندین کامپوننت به اشتراک گذاشته شود، آنگاه باید در محلی مشترک نگهداری شود و اینجا جایی است که پوشه ی مشترک به عنوان بخشی از طراحی MVC معرفی می شود.

معرفی Layout Template

پوشه ای جدید تحت پوشه ی Views اضافه کرده و نام آن را Shared بگذارید.

بر روی پوشه ی Shared راست کلیک کرده و یک آیتم جدید Razor Layout اضافه کنید.

نام پیش فرض این آیتم اضافه شده ی جدید  _Layout.cshtml است و به شکل زیر می باشد.

Layout Template

اگر جزئی تر نگاه کنید، متوجه خواهید شد که _Layout.cshtml و view ما حاوی اکثر کد مشترک است. بنابراین، زمان ادغام _Layout.cshtml درون view خود است و پس از ادغام، view ما تنها حاوی کد زیر خواهد بود.

_Layout.cshtml

تصحیح و بهبود هرچه بیشتر View با استفاده از _ViewStart

کاری بسیار عالی با کاهش تعداد خطوط کد در فایل view خود انجام دادیم، اما همچنان نیاز به انجام کارهای بیشتری است.

مجدد، layout که در view خود ادغام کردیم، باید برای هر کدام و همه ی viewها تکثیر شود.

آیا می توانیم از این تکثیر نیز رهایی یابیم؟

البته که می شود. بیایید یک آیتم Razor View Start جدید دیگر تحت پوشه ی Views با نام پیش فرض _ViewStart.cshtml اضافه کنیم.

این فایل با کد پیش فرض درون آن به شکل زیر می آید و بطور خودکار فراخوانی می شود.

@{  
    Layout = "_Layout";  
}

حال می توانید مشاهده کنید که این فایل، Layout را برای ما متصل کرده است، بدین معنا که تعداد خطوط کد در view ما باز هم بیشتر، به تنها چند خط، بصورت زیر کاهش یافته است.

Layout

می توانید برنامه ی خود را مجدد اجرا کرده و تأیید کنید که مطابق انتظار کار می کند.

معرفی ViewModel

باید متوجه شده باشید که view ما داده ها را از چندین مسیر می گیرد.

بنابراین، چرا نمی توانیم از این مورد رهایی یافته و یک تک موجودیت ایجاد کنیم که منبع view ما باشد.

بیایید این را امتحان کنیم.

پوشه ای جدید به نام ViewModels تحت پروژه، با کلاسی جدید به نام HomeViewModel تحت آن ایجاد خواهیم کرد.

این کلاس ViewModel منبع داده ای برای Home view ما خواهد بود.

در این زمان، حداقل فیلدهای ممکن را که در زیر نشان داده شده در نظر می گیریم،

public class HomeViewModel  
{  
    public string Title { get; set; }  
    public List<cookie> Cookies { get; set; }  
}  

به این ترتیب، باید متد Index خود را درون HomeController بصورت زیر بروزرسانی کنیم،

public IActionResult Index()  
{  
    HomeViewModel viewModel = new HomeViewModel  
    {  
            Title = "Cookies and only Cookies",  
            Cookies = _repository.GetAllCookies().OrderByDescending(x => x.Price).ToList()  
    };  
             
    return View(viewModel);  
}  

در آخر، بیایید View را با ارجاع HomeViewModel بصورت زیر بروزرسانی کنیم،

CookieStore

خروجی را مجدد تأیید کنید، باید همچنان به همان شکل باشد.

بهبود ظاهر و حس View با استفاده از Bootstrap

این کار می تواند با استفاده از یک پکیج سمت سرویس گیرنده، شناخته شده با عنوان Bootstrap، انجام گیرد.

بسته به نسخه و بروزرسانی های Visual Studio، فرد می تواند هر یک از package managerها از جمله (Bower، Library Manager (LibMan و …، را انتخاب کند.

در اینجا، من با Library Manager پیش خواهم رفت، چراکه نسخه ی Visual Studio من ۱۵.۸.۵ است.

بیایید ادامه داده و آیتم جدید ‘Add Client-Side Library’ را در سطح پروژه اضافه کرده و جزئیات را بصورت زیر فراهم کنیم،

اپلیکیشن NET Core 2.2.

قدم بعد، افزودن تصاویر به برنامه ی خود است.

برای این کار، نیاز است پوشه ای دیگر به نام Images تحت wwwroot ایجاد کنیم.

سپس، باید یک style sheet  را برای این کار به برنامه ی خود اضافه کنیم.

پوشه ای جدید به نام content باید تحت wwwroot اضافه شود و درون آن، باید یک css به نام site.css ایجاد کنیم.

هنگامی که این عمل انجام شد، می توانیم استایل پایه ی زیر را اضافه کنیم.

body {  
    padding-top:50px;  
    padding-bottom:20px;  
    background-image: url();  
    background-repeat: repeat;  
}  
  
.body-content{  
    padding-left: 15px;  
    padding-right: 15px;  
}  

در آخر، باید css و bootstrap را با صفحه ی _Layout خود با استفاده از <Link> بصورت زیر پیوند دهیم.

اپلیکیشن NET Core 2.2.

قدم بعد، بروزرسانی فایل view جهت تطبیق با bootstrap می باشد. در ادامه کد کامل آمده است.

اپلیکیشن NET Core 2.2.

اگر همه ی کارها به خوبی انجام گرفته باشد، با اجرای برنامه، صفحه ی وب زیر را مشاهده خواهید کرد.

Cookies

مرحله ی بعد، پیوند دادن پایگاه داده ی حقیقی با برنامه ی خود است.

گرفتن داده های حقیقی با استفاده از EF Core

EF Core یک ORM است که از قابلیت های چند پلتفرمی مانند ASP.NET Core پشتیبانی می کند.

ذکر این نکته خالی از لطف نیست که در این زمان، EF Core تنها از رویکرد Code-First پشتیبانی می کند.

در ادامه مراحلی که باید برای ادغام کامل EF با برنامه ی خود مورد توجه قرار بگیرد، آورده شده است.

  •  ایجاد کلاس های Entity
  •   ایجاد Database Context
  •   راه اندازی رشته ی اتصال
  • تغییرات پیکربندی برنامه

بیایید کلاسی جدید به نام DatabaseContext تحت پوشه ی Models ایجاد کرده و کد زیر را در آن قرار دهیم.

public class DatabaseContext:DbContext  
{  
    public DatabaseContext(DbContextOptions<databasecontext> options):base(options)  
    {  
  
    }  
    public DbSet<cookie> Cookies { get; set; }  
}

DatabaseContext نقشی حیاتی در اتصال برنامه ی ما به پایگاه داده ی حقیقی ایفا می کند.

تا به اینجا، از مقادیر آزمایشی با استفاده از کلاس MockRepository استفاده می کردیم.

بنابراین، زمان آن رسیده که کلاسی حقیقی به نام Repository تحت پوشه ی Models ایجاد کنیم که دارای کد زیر باشد.

public class Repository:IRepository  
{  
    private readonly DatabaseContext _dbContext;  
    public Repository(DatabaseContext databaseContext)  
    {  
        _dbContext = databaseContext;  
    }  
  
    public Cookie GetCookie(int id)  
    {  
        return _dbContext.Cookies.FirstOrDefault(x => x.Id == id);  
    }  
  
    public IEnumerable<cookie> GetCookies()  
    {  
        return _dbContext.Cookies;  
    }  
} 

قدم بعد، راه اندازی رشته ی اتصال است.

امیدوارم اکثر شما از این موضوع آگاه باشید که ASP.NET Core دیگر از فایل web.config استفاده نمی کند، در عوض از appsettings.json استفاده می کند.

بنابراین، یک آیتم جدید ‘App Settings File’ به نام appsettings.json اضافه کرده و رشته ی اتصال را در آن بروزرسانی کنید.

کد من به این شکل است:

{  
  "ConnectionStrings": {  
    "DefaultConnection":   
         "Server=(localdb)\\MSSQLLocalDB;Database=CookiesDataStore;  
          Trusted_Connection=True;MultipleActiveResultSets=true"  
  }  
}  

به عنوان قدم آخر، باید EF core را با برنامه ی خود ثبت کنیم و این کار از طریق بروزرسانی ConfigureServices() در کلاس Startup بصورت زیر قابل انجام است.

public class Startup  
{  
    public IConfiguration Configuration { get; set; }  
  
    public Startup(IConfiguration configuration)  
    {  
        Configuration = configuration;  
    }  
  
    public void ConfigureServices(IServiceCollection services)  
    {  
        services.AddDbContext<DatabaseContext>(options => options.UseSqlServer  
                     (Configuration.GetConnectionString("DefaultConnection")));  
        services.AddTransient<IRepository, Repository>();  
        services.AddMvc();  
    }  
  
        // This method gets called by the runtime.   
        // Use this method to configure the HTTP request pipeline.  
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)  
    {  
        app.UseDeveloperExceptionPage();  
        app.UseStatusCodePages();  
        app.UseStaticFiles();  
        app.UseMvcWithDefaultRoute();  
    }  
}  

زمان ساخت کد و تأیید اینکه خطای کامپایل دیگری وجود ندارد، فرا رسیده است.

ایجاد یک پایگاه داده

به منظور مشاهده ی چیزی در یک صفحه ی وب، به داده هایی در پایگاه داده ی خود نیاز داریم.

در اینجا، از Package Manager Console با فرمان زیر استفاده خواهیم کرد:

PM> add-migration CookiesDatabaseMigration
PM> update-database

جهت افزودن تعدادی داده ی اولیه به پایگاه داده، کلاسی جدید به نام DbInitializer تحت پوشه ی Models با کد زیر ایجاد خواهیم کرد.

public static class DbInitializer  
{  
    public static void Seed(DatabaseContext dbContext)  
    {  
        if (!dbContext.Cookies.Any())  
        {  
            dbContext.AddRange(  
                new Cookie  
                {                          
                    Name = "Choco Chips",  
                    Price = 80,  
                    TinyDescription = "Dark chocolate overloaded",  
                    FullDescription = "This is one of the most moist   
                                       and flavourful cookie,   
                                       which can make anyone's mood happy.",  
                    IsCookieOfTheDay = false,  
                    ImageUrl = "\\Images\\Chocochip.png"  
                },  
                new Cookie  
                {  
                    Name = "Nuts & Peanuts",  
                    Price = 75,  
                    TinyDescription = "Truely healthy",  
                    FullDescription = "This cookie is fully loaded   
                                       with nuts of various types and   
                                       contain nice amount of peanut butter.",  
                    IsCookieOfTheDay = true,  
                    ImageUrl = "\\Images\\ChocolateChipWalnut.png"  
                },  
                new Cookie  
                {  
                    Name = "Berries & Rasins",  
                    Price = 50,  
                    TinyDescription = "Amazingly fruity",  
                    FullDescription = "This is one of the best ever soft   
                                       and chewy cookie and also been awarded   
                                       as the best cookie several times.",  
                    IsCookieOfTheDay = false,  
                    ImageUrl = "\\Images\\Nuts.png"  
                },  
                new Cookie  
                {  
                    Name = "Coconut",  
                    Price = 100,  
                    TinyDescription = "Truely healthy",  
                    FullDescription = "This cookie is best suited   
                                       for the nut lovers. It's less sweet and   
                                       gives very elegant taste.",  
                    IsCookieOfTheDay = false,  
                    ImageUrl = "\\Images\\Coconut.png"  
                }  
                );  
        }  
        dbContext.SaveChanges();  
    }  
} 

قدم بعد، فراخوانی این DbInitializer از کلاس Program است و در اینجا کد بروز شده برای آن آمده است.

public static void Main(string[] args)  
{  
    var host = CreateWebHostBuilder(args).Build();  
    using (var scope = host.Services.CreateScope())  
    {  
        var services = scope.ServiceProvider;  
        try  
        {  
            var context = services.GetRequiredService<databasecontext>();  
            DbInitializer.Seed(context);  
        }  
        catch (Exception ex)  
        {  
            // TODO  
        }  
    }  
  
    host.Run();  
}

اکنون به سرعت برنامه را اجرا کرده و همان خروجی پیشین را مشاهده خواهید کرد.

افزودن مسیریابی

به عنوان بخشی از مسیریابی، یک صفحه ی جزئیات ایجاد خواهیم کرد که جزئیات کوکی انتخاب شده را نگه خواهد داشت.

برای گرفتن جزئیات یک کوکی انتخاب شده، باید متدی جدید در کلاس HomeController بصورت زیر اضافه شود.

public IActionResult Details(int id)  
{  
    var cookie = _repository.GetCookie(id);  
    return View(cookie);  
} 

و البته که باید view را برای این متد با نام Details.cshtml تحت HomeController اضافه کنیم.

حال، می خواهیم از Index view به Details view برویم. بنابراین، از همیارهای تگ بصورت زیر استفاده خواهیم کرد.

اپلیکیشن NET Core 2.2.

قدم آخر، افزودن مسیریابی در صفحه ی ابتدایی خود است و این کار با استفاده از عنصر nav قابل انجام است.

در ادامه کد بروز شده ی _Layout.cshtml آمده است.

اپلیکیشن NET Core 2.2.

اکنون به سرعت برنامه را اجرا کرده و قادر خواهید بود پیوندها را در بالای صفحه به این صورت مشاهده کنید.

Cookies

 

افزودن فرم جهت درخواست نظرات

حال، بیایید فرمی اضافه کنیم که کاربر از طریق آن بتواند بازخورد یا نظراتی را برای کوکی های ما بدهد.

بدین منظور، باید موجودیت مدل جدیدی به نام Feedback بصورت زیر اضافه کنیم.

public class Feedback  
{  
    public int Id { get; set; }  
    public string Name { get; set; }  
    public string Content { get; set; }  
    public string Email { get; set; }  
}  

قدم بعد، بروزرسانی پایگاه داده با این موجودیت جدید است و این کار از طریق اجرای فرمان add-migration به این صورت امکان پذیر است.

PM> Add-Migration Feedback

بیایید فورا رابط و متدی را برای ذخیره ی بازخورد در آن اضافه کنیم و کد آن به شکل زیر می باشد.

public class FeedbackRepository: IFeedbackRepository  
{  
    private readonly DatabaseContext _dbContext;  
    public FeedbackRepository(DatabaseContext context)  
    {  
        _dbContext = context;  
    }  
    public void AddFeedback(Feedback feedback)  
    {  
        _dbContext.Feedbacks.Add(feedback);  
        _dbContext.SaveChanges();  
    }  
}  

پس از آن، نوبت به ثبت این رابط جدید با ظرف تزریق وابستگی، تحت متد ConfigureServices، می رسد.

public void ConfigureServices(IServiceCollection services)  
{  
    ...  
    services.AddTransient<IFeedbackRepository, FeedbackRepository>();  
    services.AddMvc();  
}  

اکنون زمان ایجاد تغییرات در UI برای عملکرد بازخورد می باشد.

در ادامه، کد FeedbackController و view آن آورده شده است.

public class FeedbackController : Controller  
{  
    private readonly IFeedbackRepository _feedbackRepository;  
    public FeedbackController(IFeedbackRepository feedbackRepository)  
    {  
        _feedbackRepository = feedbackRepository;  
    }  
  
    public IActionResult Index()  
    {  
        return View();  
    }  
  
    [HttpPost]  
    public IActionResult Index(Feedback feedback)  
    {  
        _feedbackRepository.AddFeedback(feedback);  
        return View();  
    }  
}  

اپلیکیشن NET Core 2.2.

قدم بعد، افزودن لینک Feedback در صفحه ی آغازین برنامه ی خود است و این کار از طریق بروزرسانی صفحه ی Layout بصورت زیر انجام می شود.

اپلیکیشن NET Core 2.2.

با کلیک بر روی Feedback، مسیریابی در صفحه ی زیر رخ می دهد.

ایمن سازی شناسه ی پیکربندی برنامه

به عنوان بخشی از این قسمت، ASP.NET Core identity API را جستجو خواهیم کرد و جهت انطباق با آن، باید مقداری از کد موجود خود را بروز کنیم.

بیایید با کلاس DatabaseContext شروع کنیم.

اکنون، در عوض ارث بری با DbContext، کلاس DatabaseContext را با IdentityDbContext<IdentityUser> ارث بری خواهیم کرد و همزمان، باید خط لوله ی میان افزاری خود را با افزودن app.UseAuthentication() بروزرسانی کنیم.

سپس، باید پایگاه داده ی خود را با اطلاعات کاربر بروزرسانی کنیم.

بنابراین، باید add and update migration را بصورت زیر اجرا کنیم:

PM> add-migration AuthenticationAdded
PM> update-database

با اجرای موفقیت آمیز آن، خواهید دید که جداول زیر در پایگاه داده ایجاد شده اند،

اپلیکیشن NET Core 2.2.

افزودن پشتیبانی از احراز هویت

برای افزودن قابلیت های احراز هویت به برنامه ی خود، از عملکرد پیش فرض ارائه شده توسط Razor Class Library که با ASP.NET Core همراه است، استفاده خواهیم کرد.

برای انجام این کار، بر روی پروژه راست کلیک و Add و سپس New Scaffolded Item… را انتخاب کرده، Identity را برگزینید.

پس از انجام عمل فوق، کادر محاوره ای زیر را دریافت خواهیم کرد که تمامی viewهایی که برای استفاده ی ما به راحتی در دسترس می باشند را ذکر می کند.

در اینجا، سه view با زمینه ی داده ای مورد نیاز بصورت زیر انتخاب می کنم،

اپلیکیشن NET Core 2.2.

public class IdentityHostingStartup : IHostingStartup  
    {  
        public void Configure(IWebHostBuilder builder)  
        {  
            builder.ConfigureServices((context, services) => {  
                services.AddDefaultIdentity<identityuser>(IdentityUser)  
                .AddEntityFrameworkStores<databasecontext>(DatabaseContext);  
            });  
        }  
    }  

در کد فوق، از database context جهت ذخیره ی اطلاعات شناسه استفاده می کنیم.

در آخر، باید لینکی در نوار مسیریابی خود ارائه کنیم، بنابراین تنها موارد مربوط به ورود را از طریق بکارگیری <Partial> بصورت زیر به صفحه ی _Layout متصل کنید.

اپلیکیشن NET Core 2.2.

اکنون، برنامه را اجرا کرده و مشاهده خواهید کرد که دو لینک دیگر به نوار مسیریابی اضافه شده اند.

البته، می توانید فراتر رفته و اکنون عملکرد Register و Login را به دلخواه تغییر دهید. جالب نیست؟

افزودن پشتیبانی از تصدیق

تا به اینجا، عملکرد ورود را فراهم کرده ایم، اما در رابطه با محدود کردن هر یک از کاربران از بکارگیری برخی از عملکردهای یک وبسایت، برای مثال، اینکه تنها کاربران وارد شده باید مجاز به ارائه ی بازخورد باشند، کاری انجام نداده ایم.

در اینجا مفهوم Authorization  به میان می آید.

بیایید این کار را فورا با مزین کردن کنترل کننده ی Feedback خود به صفت Authorize بصورت زیر انجام دهیم.

[Authorize]  
public class FeedbackController : Controller  
{  
   ……           
}  

کار ما به اتمام رسیده و زمان اجرای برنامه و تأیید تمامی موارد فرا رسیده است.

امیدوارم از ایجاد برنامه ی ASP.NET Core خود با تمامی مفاهیم پایه ی پوشش داده شده لذت برده باشید.

  • پسورد: www.mspsoft.com
زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.