ASP.NET Core بر روی Net Core ساخته شده است. Net Core مجموعه از ابزارها و قابلیت های برنامه نویسی و همچنین سرویس های کامپایلر را فراهم کرده است ولی ASP.NET Core ویژگی هایی برای ساخت برنامه های وب همانند قابلیت های پردازش درخواست های HTTP مانند درخواست های GET و POST، مدل میزبانی انعطاف پذیر، زیر ساخت های امنیتی و قابلیت های مسیریابی درخواست های ورودی را فراهم کرده است.

معماری ASP.NET Core MVC

این دوره بر پایه ASP.NET Core MVC است و از این رو نیاز است تا معماری آن را پیش از آموزش بشناسیم. معماری آن از دید منطقی دربرگیرنده مولفه های گوناگونی است که در زیر آنها فهرست شده اند.

  • Route Handler
  • Action Invokers
  • Action Result
  • View Engine
  • Model Binder
  • Filter ها
  • کمک کننده های HTML و Tag

Route Handler

در نوشته های پیش رو درباره چگونگی دریافت یک درخواست HTTP و چگونگی ادارعه شدن آن در ASP.NET Core خواهیم گفت. درخواست ها بدست نشانی URL به برنامه فرستاده می شوند از این رو، این مولفه مسئول نگاشت میان یک نشانی URL به یکی از پاسخ دهنده های نوشته شده در برنامه است. برابر با شکل زیر زیر ساخت مسیریابی (Routing Infrastructure) بخشی از ASP.NET Core است و نه بخشی از ASP.NET Core MVC. خود ASP.NET Core MVC دارای اداره کننده مسیر (Route Handler) پیش فرض به نام MvcRouteHandler است که میانجی میان زیر ساخت مسیریابی و کلاس های کنترل گر است. در نوشته های پیش رو درباره مفهوم مسیر (Route) و نگاشت یک درخواست ورودی از URL به یک کلاس کنترل گر بیشتر گفته شده است.

Action Invoker

همانگونه که در نوشته های پیش رو خواهید دید، هر کلاس کنترل گر دارای یک سری از متدها است که Action Method نامیده می شود. همچنین خواهیم گفت که در ASP.NET Core یک سری از متدها به نام کمک کننده ها یا Helper ها هستند. Route Handler مشخص می کند که کدام بر پایه درخواست ورودی کدام متد از کدام کلاس کنترل گر باید اجرا شود و در برابر آن Action Invoker یک نمونه از کلاس کنترل گر پاسخ دهنده به درخواست را می سازد و سپس متد Action درست را فراخوانی می کند.

Action Result

Action Result کلاس انتزاعی است که از آن برای نمایش پاسخ در فرمت های گوناگون به عنوان نتیجه به View توسط متدهای Action (یا همان متدهای کنترل گر) برگشت داده می شود. در واقع Action Result نوع برگشتی (Return Type) متدهای کلاس کنترل گر را مشخص می کند. توجه کنید کنترل گرها میانجی میان مدل و نما هستند ولی در واقع این متدهای کلاس کنترل گر هستند که رفتار و چگونگی پاسخ داده به کار را اداره می کنند و از این رو مقدار برگشتی آنها می تواند یکی از کلاس های Result زیر باشد که در نوشته های پیش رو درباره آنها خواهیم گفت.

  • ViewResult
  • PartialViewResult
  • RedirectResult
  • RedirectToRouteResult
  • ContentResult
  • JsonResult
  • JavaScriptResult
  • FileResult
  • EmptyResult

View Engine

در نوشته های پیش رو درباره Razor خواهیم گفت که آن یک موتور نما (View Engine) است که برای ساخت نماها به کار می رود و خواهیم گفت که فایل نما ترکیبی از کدهای اچ تی ام ال و دستورهای سی شارپ است. موتور نما مکانیزمی برای انقیاد کردن (Binding) داده ها به درون فایل های نما است.

Model Binders

این مولفه که می توانیم آن را انقیاد کننده مدل نیز بنامیم، مکانیزمی را برای توکن بندی (Tockenizing) داده ها در یک درخواست HTTP و تبدیل آنها به گونه (Type) های CRL (کوتاه شده Common Language Runtime) به کار می رود. گمان کنید که یک متد کنترل گر دارید که یک شی از کلاس Person را آماده می کند و یک نما داریم که دارای یک فرم اچ تی ام ال هست که داده ها را برای شی کلاس Person از آن وارد می شود. اکنون Model Binder خودکار داده های فرم اچ تی ام ال را به شی از کلاس دلخواه تبدیل می کند. اگر Model Binder ها نبودند، پس می بایست نخست یک نمونه از  کلاس Person بسازیم و سپس دوتایی نام-مقدار از شی درخواست کلاس Request را در خصوصیت های  متناسب با هر شی از کلاس Person وارد کنید.

Filters

این مولفه در برگیرنده متدهای به اشترک گذاشته شده در پروژه است که برای نمونه کاربردهایی مانند احراز هویت (Authentication) و بررسی مجوز (Authorization) فراهم شده اند. ASP.NET Core MVC چندین فیلترهای گوناگون را فراهم کرده که می توانند یا پیش از و یا پس از فعالیت کنترل گر انجام شوند.

Helpers

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

معماری ASP.NET Core

آنچه که در بالا گفته شد، معماری یک پروژه ASP.NET Core MVC را گفتیم ولی شکل زیر از دید دیگری معماری خود ASP.NET Core را نشان می دهد که می توان آن را به چهار بخش دسته بندی کرد. Hosting مسئول میزبانی فرایندهای برنامه وب شما، Runtime، مسئول بارگذاری و مقداردهی اولیه Net Framework، سومین بخش، NET CRL، وظیفهٔ مدیریت اجرای برنامه‌های دات‌نت را برعهده دارد و در پایان، مولفه های ASP.NET Core و ASP.NET Core MVC را نشان می دهد.

میزبانی

واپسین لایه از شکل بالا، لایه میزبانی در پروژه های ASP.NET Core را نشان می دهد. همانگونه که می بینید میزبان های گوناگونی هست که در برگیرنده ASP.NET Core Modue و Kerestal و فرمان dotnet.exe می شود. میزبان ASP.NET Core Module اجازه می دهد تا پروژه بر روی وب سرور IIS انجام شود. فرمان dotnet.exe یک ابزار خط فرمان است که درباره آن خواهیم گفت ولی در اینجا باید بگوییم که از این فرمان می توان یک پروژه را می توان بر روی سیستم و برای انگیزه های توسعه و آزمایش اجرا کنیم.

Krestal یک سرور HTTP با کارایی بالا چند سکویی است که بر پایه کتابخانه ورودی/خروجی ناهمگام libuv ساخته شده است. این میزبان کارایی بالایی برای میزبانی پروژه دارد ولی کارایی آن به اندازه IIS نیست. برای نمونه اگر بخواهید در پروژه Window Authentication داشته باشید، پس باید IIS را در کنار Krestal به کار ببرید.