خلاصه ای از آنچه که در ASP.NET Core 2.0 جدید آمده است

چهارشنبه 1 شهریور 1396

نسخه 1پیش نمایش ASP.NET Core 2.0 در حال حاضرمنتشر شده است و شما می توانید شروع به ساختن برنامه با ASP.NET Core 2.0 کنید.برای ساخت برنامه مبتنی بر ASP.NET Core 2.0، باید نسخه 3 پیش نمایش Visual Studio 2017 را نصب کنید.از انجایی که این یک انتشار خیلی بزرگی بوده است انتظار می رود که بعضی از کدها تغییرات بشکنند و به یک قطعه کد جدید تبدیل بشوند. در این مقاله، ما قصد داریم که به طور خلاصه سریع و کوتاهی ویژگی های جدید ASP.NET Core 2.0 را معرفی کنیم و آن را با ASP.NET Core 1.1 مقایسه کنیم.

خلاصه ای از آنچه که در ASP.NET Core 2.0 جدید آمده  است

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

Visual Studio 2017 Core

بیایید با ویژگی های جدید ASP.NET Core 2.0 آشنا شویم.

1)ASP.NET Core 2.0 نسخه 2 NET Standard.  را پیاده سازی کرده است ، که این به شما اجازه میدهد که قسمتی از نسخه قبلی NET Framework. در ASP.NET Core مانند دیتا ست ها(Datasets) ، سریال های باینری (Binary Serialization) ،  بازتاب (Reflection ) و بسیاری از قسمت های دیگر آن استفاده کنید.

2)برنامه ASP.NET Core را همچنین می توان از طریق dotnet cli نیز ایجاد کرد.دستور زیر یک برنامه وب جدید ASP.NET Core ایجاد می کند.

dotnet new web

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

dotnet restore

لازم نیست این فرمان اضافی را با استفاده از NET Core 2.0 اجرا کنید.بازیابی پکیج ها در حال حاضر بخشی از دستور جدید dotnet است.

3) در حال حاضر برنامه ASP.NET Core 2.0 برای قراردادن تمامی پکیج های ASP.NET Core که متناسب با ورژن محصول هستند تنها از یک پکیج متا به نام Microsoft.AspNetCore.All استفاده میکند.که این باعث می شود فایل csproj. کوتاه و تمیز باشد.نمونه ای از فایل csproj. در ASP.NET Core 2.0  دیده می شود(خطه شماره 13).

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <UserSecretsId>aspnet-ASPNETStandard2App-78010062-13D5-415D-B52E-86D936DA3176</UserSecretsId>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0-preview1-final" />
  </ItemGroup>

</Project>

این یک روش فوق العاده آسان است که تمام رفرنس پکیج های ASP.NET Core را بدون هیچ گونه نگرانی در مورد نسخه های مختلف آن ها رفرنس می دهد.شما دیگر مجبور نیستید پکیج های خاص ASP.NET Core را انتخاب کنید.اما صبر کنید، زمانی که ASP.NET Core معرفی شد، در مورد ماژولار بودن آن بحث های بسیار زیادی بود ولی تنها چیزهایی را که مورد نیاز است را به ارمغان آورده است.به عنوان مثال، اگر شما برنامه ای از نوع MVC میخواهید پس باید پکیج های آن را نیز در آن قرار دهید.بسیاری از توسعه دهندگان این را دوست دارند زیرا حجم برنامه را کاهش می دهد.بنابراین آیا به سمت ماژلار بودن میرویم ؟ پاسخ خیر است.

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

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

نگرانی شما درست است، اما از مایکروسافت نگران نباشید، زیرا NET Core SDK. در حال حاضر تمام پکیج های موجود در داخل Microsoft.AspNetCore.All را در خود دارد، بنابراین شما هرگز آنها را از وب دانلود نمی کنید.تمام اینها در سیستم شما موجود است.

در رابطه با Deployment؟

خب ، اگر شما ویژگی هایی که در برنامه تان است را نیاز ندارید ، ویژگی جدید پیرایش پکیج ها، باینری آن را در هنگام پابلیش برنامه به صورت پیشفرض غیرفعال کنید.

ASP.NET Core 2.0 راه جدیدی برای ساخت پیکربندی میزبان وب (web host configuration) ارائه داده است.

این رویکرد جدید، حالت پیش فرض های پیکربندی وب را با استفاده از WebHost.CreateDefaultBuilder() API تنظیم می کند.

آشنایی با Program.cs در ASP.NET Core 1.1

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 2.0 به شکل زیر درامده است:

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

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

BuildWebHost یک عضو تابع بیان(expression bodied function member) است که در C # 6 معرفی شده است.

این متد ، یک متد استاتیک CreateDefaultBuilder فراخوانی میکند که Kestrel، تنظیمات IIS، تنظیمات پیشفرض منابع پیکربندی(configuration sources) ، ارائه دهندگان ورود به سیستم و محتوا ریشه را اضافه می کند.به جای این که همه این کارها را شما انجام دهید،تابع  CreateDefaultBuilder این کارها را برای شما انجام خواهد داد. شما می توانید کد این تابع را در اینجا بخوانید.ورود و ساختن پیکربندی دیگر بخشی از فایل Startup.cs نیست.در حال حاضر بخشی از CreateDefaultBuilder است که در Program.cs  فراخوانی میشود.

Startup.Cs در پروژه ASP.NET Core 1.1 به زیر مشاهده می شوند:

public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; }

    // از این متد برای افزودن سرویس به Container استفاده می شود.
    public void ConfigureServices(IServiceCollection services)
    {
        // افزودن فریم ورک سرویس ها.
        services.AddMvc();
    }

    //این متد برای تنظیم کردن درخواست http در pipeline استفاده می شود.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        app.UseMvc();
    }
}

در ASP.NET Core 2.0 به صورت زیر دیده میشوند:

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

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

        
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            app.UseMvc();
        }
    }
}

همانطور که می بینید، سازنده دیگر از IHostingEnvironment استفاده نمی کند، بلکه تزریق وابستگی ICconfiguration را می گیرد و در صورت نیاز، ویژگی Configuration را برای دسترسی بعدی انتخاب می کند.یکی دیگر از تغییراتی که در متد Configure اعمال شده است این است که logging  دیگر در این متد قرار ندارد.ASP.NET Core 2.0 صفحات Razor را نیز معرفی کرده است.صفحات Razor صفحات ساده و یا view ها بدون کنترلر مرتبط با آن ها هستند.صفحات Razor با پکیج Microsoft.AspNetCore.Mvc همراه است.این صفحات نیاز دارند که در پوشه pages  با فرمت .cshtml باشند.

در زیر یک نمونه کد صفحه Razor را مشاهده میکنیم.

@page

@{
    var message = "Hello, World!";
}

<html>
<body>
    <p>@message</p>
</body>
</html>

ما باید در بالا به عنوان اولین دستورالعمل از دستور  page@ استفاده کنیم.شما می توانید صفحه razor را با مدل خطی (با استفاده از دستورالعمل functions@)، مدلهای صفحه جداگانه (به نام صفحه مدل) و بدون مدل، بنویسید.Routing به خوبی با صفحات Razor کار می کند.

Authentication تحت یکسری تغییرات عمده برای ورژن 2 قرار گرفته است.

تمام میان افزار های Auth در حال حاضر هم درحال سرویس دادن هستند و تنها میان افزار مورد نیاز Authentication که به آن نیاز داریم ()APP.UseAuthentication است.در NET Core 1.1. ، برای فعال سازی کوکی احراز هویت باید به این صورت عمل کنیم:


 
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseCookieAuthentication(new CookieAuthenticationOptions()
     {
         AuthenticationScheme = "MyCookieMiddlewareInstance",
         LoginPath = new PathString("/Account/Unauthorized/"),
         AccessDeniedPath = new PathString("/Account/Forbidden/"),
         AutomaticAuthenticate = true,
         AutomaticChallenge = true
     });
     app.UseMvc();
}

گزینه های .w.r.t برای کوکی  مربوط به احراز هویت در متد ()Configure مشخص شده اند. این در 2.0 تغییر کرده است. حالا، به این صورت عمل میکند:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCookieAuthentication(o => o.LoginPath = "/api/login");
}

public void Configure(IApplicationBuilder app)
{
    app.UseAuthentication();
    app.UseMvc();
}

همانطور که می بینید، متد ()Configure اکنون میان افزار authentication را به pipeline  بدون مشخص کردن گزینه های قابل تنظیم برای مکانیزم authentication اضافه می کند.جدول زیر، تغییرات نام برخی از میان افزار های authentication را نشان می دهد.

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 3k بازدید
  • 4 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید