پرش به مطلب اصلی

ASP.NET Core

مقدمه

در این فاز با فریم‌ورک ASP.NET Core آشنا خواهید شد.

برای آشنایی با تاریخچه و دلیل محبویت وب و مزایای آن نسبت به مدل‌های قدیمی ارتباط client-server مقاله From History of Web Application Development را مطالعه کنید.

سلام به دنیای ASP.NET Core

ASP.NET Core یک چارچوب به زبان #C است که به وسیله آن می‌توانید یک سرور RESTful api راه‌اندازی کنید.

برای ساخت یک پروژه ASP.NET Core کافی است در ترمینال دستور زیر را وارد کنید:

dotnet new webapi

برای اجرا شدن اولین پروژه ASP.NET Core خود در ترمینال دستور زیر را وارد کنید:

dotnet run

پیش از اجرای برنامه خود برای اولین بار دستور dotnet dev-certs https --trust را در ترمینال اجرا کنید.

حال برای مشاهده خروجی کار آدرس https://localhost:<app port>/WeatherForecast را در مرورگر خود باز کنید.

همانگونه که مشاهده می‌کنید در خروجی یک لیست از داده‌های آب و هوایی وجود دارد که در پروژه پیش فرض ASP.NET Core تعریف شده است.

برای مشاهده لیست APIها و مطالعه مستنداتی ساده درباره هر API می‌توانید آدرس https://localhost:<appPort>/swagger را در مرورگر باز کنید.

Controller و Action Method

در یک پروژه ASP.NET Core درخواست‌های رسیده به سایت یا Web Application توسط کنترلرها پاسخ داده می‌شوند. پس به زبان خیلی ساده، کنترلرها به درخواست‌هایی که توسط کاربران ارسال می‌شوند پاسخ می‌دهند. کنترلرها کلاس‌هایی هستند که در فولدر Controllers قرار دارند. این کلاس‌ها با کلمه Controller به اتمام می‌رسند و از کلاس Controller یا ControllerBase ارث بری می‌کنند.

هر متدی با دسترسی عمومی (Public) در کنترلر، به عنوان یک متد عملیاتی (Action Method) شناخته می‌شود، پس به متدهایی که درون کلاس کنترلر تعریف می‌کنیم اکشن متد گفته می‌شود. هر درخواست کاربر به اکشن متد مربوطه ارسال می‌شود و اکشن متد به درخواست کاربر پاسخ می‌دهد.

ساخت یک کنترلر ساده

در فولدر Controllers خود یک فایل به نام SimpleController ایجاد کنید و کدهای زیر را درون آن قرار دهید.

using Microsoft.AspNetCore.Mvc;

namespace Example.Controllers
{
[ApiController]
[Route("[controller]/[Action]")]
public class SimpleController : ControllerBase
{
[HttpGet]
public string Get()
{
return "Hello world!";
}
}
}

در کد بالا شما یک کنترلر به نام Simple ساختید که یک اکشن متد به نام Get دارد. مسیر دسترسی به آن را هم به صورتی تعریف شده که برای دسترسی به آن ابتدا باید نام کنترلر و سپس نام اکشن متد بیاید. برای تست کد خود لینک https://localhost:<appPort>/Simple/Get را باز کنید و خروجی آن را مشاهده کنید.

خروجی اکشتن متدها

در ASP.NET Core خروجی اکشن‌ها به سه صورت می‌تواند باشد:

  • Specific type
  • IActionResult
  • ActionResult<T>

برای آشنایی بیشتر با این نوع خروجی‌ها Controller action return types in ASP.NET Core web API را مطالعه کنید.

Routing

برای مسیردهی در Asp.net core از دو روش می‌توان این کار را انجام داد. یکی ست کردن تنظیمات در فایل Program.cs و دیگری استفاده از اتریبیوت Route. برای آشنایی بیشتر با این موضوع لینک‌های زیر را مطالعه کنید:

Dependency Injection

تزریق وابستگی یا (Dependency Injection) فرآیندی می‌باشد که در آن وابستگی‌های ما به یک کلاس با استفاده از یک رابط کاربری (یا همان Interface) حذف می شود. در ASP.NET Core به صورت پیش فرض این امکان به ما داده شده است که بتوانیم بدون نیاز به درگیری با مورد خاصی از این ویژگی استفاده کنیم.

برای یادگیری و درک بهتر این موضوع لینک‌های زیر را مطالعه کنید:

Http Methods

با استفاده از اتریبیوت‌های Http Methods شما می‌توانید مشخص کنید اکشن شما با استفاده از کدام Http method صدا شود.

درک بهتر لینک‌های زیر را مطالعه کنید:

Parameter Binding

در ASP.NET Core برای گرفتن محتویات درخواست Http به آرگومان‌های ورودی اکشن از Parameter Binding کمک می‌گیریم. به وسیله این مفهوم مشخص می‌کنیم داده از Body یا قسمت‌های دیگر ریکوئست خوانده شود.

برای آشنایی بیشتر با این مفهوم لینک‌های زیر را مطالعه کنید:

Configuration

در ASP.NET Core تنظیمات برنامه می‌تواند از منابع مختلفی بیاید. یکی از پرکاربرد‌ترین آن‌ها فایل است. تغییر تنظیمات ذخیره شده در فایل نیاز به Build مجدد ندارد. از این رو استفاده از آن متداول است. با استفاده از لینک‌های زیر با این فایل‌ها در ASP.NET Core آشنا شوید و تفاوت فایل‌های launchSetting.json، appsetting.json و appsetting.{Environment}.json را درک کنید. ({Environment} محیط کنونی برنامه است که مقدار آن می‌تواند Development، Staging یا Production باشد)

در لینک‌های بالا مطالعه بخش‌های مربوط به Visual Studio نیاز نیست.

پروژه

روی جدول Student فاز SQL یک Web API با CRUD ساده بسازید: حدود پنج عملیات برای لیست کردن، گرفتن یکی، ساختن، به‌روزرسانی و حذف. نام و مسیر endpointها را خودتان از روی مستندات ASP.NET Core (و قراردادهای REST فاز Network) انتخاب کنید؛ مهم رفتار درست است، نه یک اسم ثابت.

برای ساخت و اجرای query از SqlKata استفاده کنید (در صورت نیاز SqlKata.Execution). با عوض شدن Database از Compiler مناسب (PostgresCompiler یا SqlServerCompiler) استفاده کنید.

نکتهٔ اصلی: کلاینت در هر درخواست مشخص می‌کند روی کدام Database اجرا شود؛ سرور همان را انتخاب می‌کند و query را آنجا می‌زند. مثلاً با query string یا header (db=postgres / db=sqlserver). connection string هر دو را در تنظیمات برنامه بگذارید؛ فقط انتخاب از ورودی درخواست باشد. اگر Database نامعتبر بود یا دانشجو پیدا نشد، پاسخ خطای واضح برگردانید.

پروژه را در Rider بسازید (قالب ASP.NET Core Web API) و پکیج SqlKata را اضافه کنید. از مفاهیم همین فاز (Controller، HTTP methods، binding، DI، config) در حد نیاز استفاده کنید و با Swagger یا Postman روی هر دو Database تست کنید.

چک‌لیست پایان فاز

  1. پنج عملیات CRUD روی Student برای PostgreSQL کار می‌کنند.
  2. با عوض کردن ورودی Database همان عملیات روی SQL Server هم کار می‌کنند.
  3. انتخاب Database نامعتبر و Student پیدا‌نشده پاسخ خطای مشخص دارند.
  4. queryها با SqlKata ساخته می‌شوند و برای هر Database Compiler درست انتخاب می‌شود.

پی‌نوشت

جهت آشنایی با ASP.NET Core Web API می‌توانید از ویدئوهای آموزشی Web APIs for Beginners مایکروسافت نیز استفاده کنید.