بررسی دقیق ساختار پروژه ASP.NET Core

Loading...
ساختار پروژه ASP.NET Core

ساختار پروژه ASP.NET Core ؛ به طور پیش فرض، فولدر wwwroot در پروژه ASP.NET Core به عنوان فولدر ریشه وب رفتار می­ کند. فایل های استاتیک می توانند در هر فولدری زیرشاخه ریشه وب ذخیره شده و با یک مسیر نسبی به آن ریشه قابل دسترسی باشند.

در اپلیکیشن استاندارد ASP.NET، فایل های استاتیک می توانند از فولدر ریشه اپلیکیشن یا هر فولدر دیگری زیرشاخه آن به کار گرفته شوند. این ویژگی در ASP.NET Core تغییر کرده است. اما حالا فقط فایل هایی که در فولدر wwwroot قرار دارند می توانند با استفاده از درخواست http به کار گرفته شوند. همه فایل های دیگر بلاک می شوند و به طور پیش فرض نمی توانند به کار گرفته شوند.

ساختار پروژه ASP.NET Core

به طور کلی، مانند شکل زیر باید فولدرهای جداگانه ای برای انواع مختلف فایل های استاتیک مانند JavaScript، CSS، تصاویر، اسکریپت های کتابخانه و غیره در فولدر wwwroot وجود داشته باشد.

ساختار پروژه ASP.NET Core

با استفاده از base URL و نام فایل می توان به فایل های استاتیک دسترسی پیدا کرد. به عنوان مثال، می توانیم با استفاده از http://localhost:<port>/css/app.css به فایل css سایت بالا در فولدر css دسترسی پیدا کنیم.

به یاد داشته باشید که برای به کار گرفتن فایل های استاتیک باید یک میان افزار را در متد Configure فایل Startup.cs وارد کنیم. در بخش به کار گرفتن فایل استاتیک بیشتر در این باره صحبت خواهیم کرد.

ASP.NET Core – Program.cs

اپلیکیشن وب ASP.NET Core درواقع یک پروژه کنسول است که از نقطه ورود public static void main() در کلاس Program جایی که ما می توانیم یک هاست برای اپلیکیشن وب ایجاد کنیم شروع به اجرا می کند.

مراحل ایجاد یک هاست در ASP.NET Core 1.x کمی با ASP.NET Core 2.x متفاوت است. خب اول به سراغ کلاس Program در اپلیکیشن ASP.NET Core 1.x چرا که به این ترتیب درک آن در ASP.NET Core 2.x ساده تر خواهد بود.

تنظیم هاست در ASP.NET Core 1.x:

کد زیر یک Program.cs معمولی در ASP.NET Core 1.x است:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;

namespace MyFirstCoreApp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}

هر اپلیکیشن وب در ASP.NET Core برای اینکه اجرا شود نیاز به یک هاست دارد. در متد Main() بالا، ما یک محیط میزبانی وب برای اپلیکیشن ASP.NET Core 1.x پیکربندی می کنیم. یک هاست باید اینترفیس IWebHost را پیاده سازی کند. خب برمی گردیم و کد بالا را خط به خط باهم مرور می کنیم.

اول، ()var host = new WebHostBuilder

کلاس WebHostBuilder یک کلاس کمکی برای ایجاد و پیکربندی هاست برای اپلیکیشن وب است. پس اول از همه باید یک شی از آن ایجاد کنیم.

نکته:

کلاس WebHostBuilder در NET Core API. گنجانده شده است. با این حال، ما می توانیم کلاس کمکی خود را برای ضرورت های سفارشی سازی هاست با پیاده سازی اینترفیس IWebHostBuilder بسازیم.

()UseKestrel.

متد ()UseKestrel یک متد افزونه است که Kestrel را به عنوان وب سرور داخلی مشخص می کند. اما Kestrel چیست! یک وب سرور اپن سورس، سازگار با پلت فرم های مختلف برای ASP.NET Core است. این وب سرور طراحی شده تا در کنار پروکسی استفاده شود زیرا هنوز به اندازه کافی کامل نشده تا به عنوان یک وب سرور کامل ارائه شود.

اپلیکیشن ASP.NET Core می تواند یک اپلیکیشن سازگار با پلت فرم های مختلف باشد، بنابراین می تواند نه فقط با IIS که با هر وب سروری استفاده شود. از این رو، وب سرور خارجی مانند IIS، Apache و Nginx و غیره وجود خواهد داشت که درخواست های http را به وب سرور داخلی Kestrel ارسال می کند. اگر به مباحث مربوط به وب سرورها در ASP.NET Core علاقمند شدید می توانید اینجا بیشتر درباره آن مطالعه کنید.

(()UseContentRoot(Directory.GetCurrentDirectory

متد ()UseContentRoot دایرکتوری جاری را به عنوان دایرکتوری ریشه مشخص می کند که پیش فرض در پروژه ASP.NET Core فولدر src خواهد بود. دایرکتوری ریشه محتوا تعیین می کند که فایل های محتوا مانند فایل های MVC view، CSS، تصاویر و غیره در کجا قرار می گیرند.

()UseIISIntegration

متد ()UseIISIntegration وب سرور IIS را به عنوان وب سرور خارجی یا وب سرور پروکسی مشخص می کند.

()<UseStartup<Startup

متد ()<UseStartup<Startup کلاس Startup را مشخص می کند تا به وسیله وب هاست استفاده شود. ویژوال استودیو به صورت پیش فرض با هر اپلیکیشن جدید ASP.NET Core فایل Startup.cs را ایجاد می کند. این کلاس Startup مشابه دوست قدیمی ما Global.asax در .NET framework است که می توان در آن کانال اتصال درخواست (میان افزار) را پیکربندی کرد. ما فقط لازم است که آن را به عنوان پارامتر جنریک در متد ()<UseStartup<T مشخص کنیم. در ادامه بیشتر درباره آن صحبت می کنیم.

و درنهایت، متد ()Build یک نمونه از IWebHost را با استفاده از پیکربندی مشخص شده در بالا برمی گرداند.

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

()host.Run

متد ()Run اپلیکیشن وب را استارت کرده و تا زمانی که هاست خاموش شود thread فراخوانی را بلاک می کند. اپلیکیشن خط فرمان از این نقطه به بعد تبدیل به اپلیکیشن وب می شود.

بنابراین، اپلیکیشن ASP.NET Core از متد ()Main کلاس Program شروع می شود که در آن می توان محیط میزبانی را ساخت و اپلیکیشن وب را استارت کرد.

تنظیم هاست در ASP.NET Core 2.x:

کد زیر کلاس Program در ASP.NET Core 2.x است:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;

namespace MyFirstCoreApp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
}

همانطور که در بالا مشاهده می­ کنید، متد Main() عبارت متد ()BuildWebHost را فراخوانی می کند تا وب هاستی با پیکربندی با پیش فرض های از پیش تعریف شده را بسازد. عبارت BuildWebHost همچنین می تواند به صورت یک متد نوشته شود که به صورت زیر IWebHost را برمی گرداند.

public static void Main(string[] args)
{
    BuildWebHost(args).Run();
}

public static IWebHost BuildWebHost(string[] args) 
{
    return WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .Build();
}

حالا مراحل تنظیم هاست را بررسی می کنیم.

WebHost یک کلاس استاتیک است که می­ تواند برای ایجاد یک نمونه از IWebHost و IWebHostBuilder با پیش فرض های از پیش پیکربندی شده استفاده شود. متد ()CreateDefaultBuilder یک نمونه جدید از WebHostBuilder با پیش فرض های از قبل پیکربندی شده ایجاد می کند. به طور داخلی، این متد Kestrel، IISIntegration و سایر پیکربندی ها را تنظیم می کند. کد زیر متد ()CreateDefaultBuilder از سورس کد گیت هاب است.

public static IWebHostBuilder CreateDefaultBuilder(string[] args)
{
    var builder = new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            var env = hostingContext.HostingEnvironment;

            config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);

            if (env.IsDevelopment())
            {
                var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));
                if (appAssembly != null)
                {
                    config.AddUserSecrets(appAssembly, optional: true);
                }
            }

            config.AddEnvironmentVariables();

            if (args != null)
            {
                config.AddCommandLine(args);
            }
        })
        .ConfigureLogging((hostingContext, logging) =>
        {
            logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
            logging.AddConsole();
            logging.AddDebug();
        })
        .UseIISIntegration()
        .UseDefaultServiceProvider((context, options) =>
        {
            options.ValidateScopes = context.HostingEnvironment.IsDevelopment();
        });

    return builder;
}

همانطور که در کد بالا مشاهده می شود، متد CreateDefaultBuilder یک نمونه از WebHostBuilder را ایجاد کرده و Kestrel، دایرکتوری ریشه محتوا، ادغام IIS را که مانند متد ()Main در ASP.NET Core 1.x است تنظیم می کند.

همچنین ()ConfigureAppConfiguration را از فایل های appsettings.json، متغیرهای محلی برای بارگذاری پیکربندی ها فراخوانی می کند. متد ()ConfigureLogging لاگ گیری را برای کنسول و پنجره debug (اشکال زدایی) تنظیم می کند.

به این ترتیب، Program.cs در ASP.NET Core 2.x تنظیم یک وب هاست را برای ما ساده تر می کند.

ASP.NET Core – Startup.cs

در این قسمت به کلاس Startup که در فایل Startup.cs در فولدر ریشه پروژه قرار دارد می پردازیم.

اپلیکیشن ASP.NET Core باید شامل کلاس Startup باشد. این کلاس شبیه Global.asax در اپلیکیشن .NET قدیمی است. همانطور که از نام آن مشخص است، زمانی که برنامه استارت می­شود ابتدا این کلاس اجرا می شود.

کلاس Startup می تواند با استفاده از متد ()<UseStartup<T در زمان پیکربندی هاست در متد Main() کلاس Program به شکل زیر پیکربندی شود.

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args)
    {
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
    }
}

نام “Startup” یک قرارداد در ASP.NET Core است. با این وجود، می توانیم هر نام دلخواهی به این کلاس بدهیم، فقط باید آن را به عنوان پارامتر جنریک در متد ()<UseStartup<T مشخص کنیم. به عنوان مثال، با نام­ گذاری کلاس Startup به عنوان MyStartup، آن را به صورت ()<UseStartup<MyStartup مشخص می کنیم.

کلاس Startup را با کلیک بر روی Startup.cs در ویژوال استودیو باز می کنیم. شکل زیر کلاس Startup پیش فرض در ASP.NET Core 2.x است.

ساختار پروژه ASP.NET Core

همانطور که می بینید کلاس Startup شامل دو متد public است: ConfigureServices و Configure.

کلاس Startup باید شامل متد Configure باشد اما وجود متد ConfigureServices اختیاری است.

()ConfigureServices:

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

متد ConfigureServices جایی است که ما می توانیم کلاس های وابسته خود را با IoC container از پیش ساخته شده ثبت کنیم. بعد از ثبت کلاس وابسته، این کلاس می تواند هرجایی در اپلیکیشن استفاده شود. فقط لازم است که آن را در پارامتر سازنده کلاسی که می خواهیم در آن از کلاس وابسته استفاده کنیم بیاوریم. IoC container آن را به صورت اتوماتیک تزریق خواهد کرد.

ASP.NET Core به کلاس وابسته به عنوان سرویس نگاه می کند. پس، هرجا خواندید “سرویس” آن را به عنوان کلاسی که قرار است در بقیه کلاس های دیگر استفاده شود بدانید.

متد ConfigureServices شامل پارامتر IServiceCollection برای ثبت سرویس ها در IoC container است. سخت شد؟ نگران نباشید، در بخش بعدی بیشتر درباره این موضوع صحبت می کنیم.

()Configure:

متد Configure جایی است که ما می توانیم کانال اتصال درخواست اپلیکیشن را با استفاده از نمونه IApplicationBuilder که به وسیله IoC container از پیش ساخته شده ارائه می شود پیکربندی کنیم.

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

کد زیر متد پیش فرض Configure است.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

همانطور که در بالا مشاهده می کنید، متد Configure به طور پیش فرض شامل سه پارامتر IApplicationBuilder، IHostingEnvironment و ILoggerFactory است. این سرویس ها، سرویس ­های فریمورک هستند که توسط IoC container پیش ساخته تزریق می شوند.

در زمان اجرا، متد ConfigureServices قبل از متد configure فراخوانده می شود. به این ترتیب می توانیم سرویس سفارشی خود را که ممکن است در متد Configure استفاده کنیم، با Ioc container ثبت کنیم.

در بخش مربوط به میان افزار درباره متد Configure بیشتر یاد می گیریم.

 



avatar فاطمه زکایی

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

آخرین مطالب و تخفیفات در کانال تلگرام :) کانال تلگرام ام اس پی سافت
ديدگاه خود را ارسال کنيد


محبوب ترين ويدئو هاي انلاين
دوره برنامه نویسی فروشگاه اینترنتی
  • تعداد اعضا 80k
  • قيمت دوره۱۳۰,۰۰۰ تومان
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...
دوره آموزشی سیستم ثبت سفارش آنلاین
  • تعداد اعضا 80k
  • قيمت دوره--
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...
دوره طراحی سیستم مدیریت مشتریان
  • تعداد اعضا 80k
  • قيمت دوره۶۵,۵۰۰ تومان
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...