کاربرد فایل Program.cs در Asp.net Core چیست ؟
سلام. فایل Program.cs چه کاربردهایی در Asp.net Core داره ؟ آیا بدون این فایل هم میشه پروژه رو ران کرد ؟
پاسخ هوش مصنوعی
فایل Program.cs در ASP.NET Core نقش مهمی در راه اندازی و پیکربندی اپلیکیشن دارد. این فایل معمولاً شامل متد Main است که نقطه ورود برنامه را مشخص می کند. به طور کلی، وظایف اصلی فایل Program.cs شامل موارد زیر است:
- ایجاد یک WebHost: این فایل معمولاً وظیفه ایجاد یک WebHost را بر عهده دارد که به عنوان سرور برای اجرای اپلیکیشن عمل می کند.
- پیکربندی خدمات: می توان در این فایل خدمات مختلفی نظیر DI (Dependency Injection)، Middleware و دیگر تنظیمات را پیکربندی کرد.
- اجرای اپلیکیشن: در نهایت، فایل Program.cs مسیول اجرای اپلیکیشن بعد از انجام پیکربندی ها است.
بدون این فایل، نمی توان برنامه را اجرا کرد، زیرا نقطه ورود برنامه مشخص نیست و WebHost برای آماده سازی اپلیکیشن وجود نخواهد داشت. در واقع، این فایل برای هر پروژه ASP.NET Core الزامی است.
به عنوان مثال، یک نمونه ساده از فایل Program.cs به شکل زیر است:
using System;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
namespace MyWebApp
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup();
});
}
}
آشنایی با کلاس Program.cs در Asp.net Core
کلاس Program.cs نقطه شروع برنامه می باشد. در این فایل شما می توانید پروژه خودتون رو پیکربندی کنید. برای اجرای پروژه وب شما نیاز به یک وب سرور دارید (IIS یا Kestrel) که در این فایل پیکربندی وب سرور نیز انجام می شود.
هر زمان که شما پروژه Dot net Core خود را اجرا می کنید در ابتدا این فایل اجرا می شود و تنظیمات اولیه پروژه شما را انجام می دهد.
نکته : اگر شما به فایل Program.cs نگاه کنید متوجه خواهید شد که در این کلاس هیچ تابع یا متدی تعریف نشده است و کدهای مربوط به پیکربندی مستقیم و بدون ساختار خاصی تعریف شده است. در این کلاس از یک خاصیت سی شارپ به نام Top Level Statement استفاده شده که امکان تعریف کدها را بدون تابع و متد به شما می دهد.
نمونه ای از کلاس Program.cs به صورت پایه و بدون تغییر :
//Section 1
var builder = WebApplication.CreateBuilder(args);
//Section 2
// Add services to the container.
builder.Services.AddControllersWithViews();
//Section 3
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
//Section 4
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
شی builder : اگر در کدهای بالا نگاه کنید در قسمت section 1 یک متغیر به نام builder از نوع WebApplication.CreateBuilder تعریف شده است. متد CreateBuilder سرور داخلی پروژه که Kestrel می باشد را راه اندازی می کند و یک سری تنظیمات دیگه مانند خواندن از فایل appsetting.json را انجام می دهد. خب پس در اینجا ما یک شی به نام builder داریم که اشاره به سرور داخلی پروژه دارد و از طریق این متغیر می توانیم هر نوع پیکربندی روی سرور انجام دهیم.
بخش Service ها : اگر به Section 2 در کدهای بالا دقت کنید، بخشی وجود دارد که شما می توانید Service های مورد نیاز پروژه خودتون رو در این قسمت به پروژه تزریق کنید. در این مثال سرویس AddControllersWithViews راه اندازی شده است. این سرویس تمامی پیش نیازهایی که برای کار با یک پروژه MVC مورد نیاز است را به پروژه اضافه می کند. در این بخش شما می توانید با توجه به نیاز پروژه خود Service های زیادی به پروژه تزریق کنید.
بخش app یا میان افزارها : در Section 3 یک متغیر به نام app تعریف شده است که از متد Build ارث بری کرده است. این بخش یکی از بخش های مهم کلاس Program.cs می باشد. در این بخش شما می توانید Middleware ها یا همان میان افزارها را تعریف کنید. request هایی که در زمینه های مختلف از طریق pipeline ها به پروژه شما ارسال می شود در این بخش مدیریت می شود.
برای درک بهتر کاربرد این بخش یک مثال برای شما میزنم. فرض کنید یک کاربر وب سایت شما را باز می کند. در این لحظه یک Request از سمت مرورگر کاربر به سرور شما ارسال می شود. این Request برای اینکه بتواند در نهایت یکی از صفحات وب سایت شما را به کاربر نمایش دهد باید مراحل مختلفی را طی کند.
به عنوان مثال ابتدا باید طبق سیستم Routing وب سایت شما مسیر حرکت مشخص شود. خب در اینجا وظیفه مسیریابی به عهده میان افزار app.UseRouting می باشد. در مرحله بعد باید استایل ها و تصاویر آن صفحه نمایش داده شود. از آنجایی که این موارد جزو static ها در سایت هستند میان افزار app.UseStatucFiles این درخواست را مدیریت می کند. همچنین اگر نیاز به احراز هویت باشد میان افزار app.UseAuthorization صدا زده می شود و به همین صورت میان افزارهای مختلف درخواست های مختلف را دریافت و مدیریت می کنند.
بخش تعریف مسیرها : یکی از بخش های مهم که جزیی از همان میان افزارها می باشد بخش تعریف الگوهایی برای مسیریابی در وب سایت می باشد. اگر در بخش Section 4 نگاه کنید متوجه می شوید یک الگو به نام default تعریف شده است که به پروژه می گوید به صورت پیش فرض باید کنترلر Home و ویوی Index نمایش داده شود. شما می توانید الگوهای مختلفی در این بخش تعریف کنید.
تفاوت بین UseEndpoints و UseRouting در مسیریابی در Asp.net Core
تفاوت مسیریابی (Routing) در Asp.net Core 2 با Asp.net Core 3 چیست ؟
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2