مهمترین تغییرات اعمال شده در ASP.NET Core 5

این مقاله مهم ترین تغییرات اعمال شده در ASP.NET Core 5.0 را با استناد به مدارک و مستندات مربوطه، بیان می کند.

آموزش Asp.net Core 5 در قالب فروشگاه اینترنتی

توسعه و پیشرفت های ASP.NET Core MVC و Razor

Model binding DateTime به عنوان UTC

اکنون Model binding از اتصال رشته های زمانی UTC در DateTime پشتیبانی می کند. درواقع چنانچه درخواست حاوی یک رشته زمانی UTC باشد، Model binding آن را به یک UTC DateTime متصل خواهد کرد. به عنوان مثال، رشته زمانی زیر به UTC DateTime متصل شده است:

https://example.com/mycontroller/myaction?time=2019-06-14T02%3A30%3A04.0576719Z

Model binding و اعتبارسنجی از طریق انواع رکوردهای C# 9

C# 9 record types را می توان از طریق model binding در یک کنترلر MVC یا Razor Page استفاده کرد. Record types، روشی مناسب جهت طراحی و مدل سازی داده هایی است که از طریق شبکه منتقل می شوند.

public record Person([Required] string Name, [Range(0, 150)] int Age);

public class PersonController
{
   public IActionResult Index() => View();

   [HttpPost]
   public IActionResult Index(Person person)
   {
          // ...
   }
}

فایل Person/Index.cshtml

@model Person

Name: <input asp-for=&quotModel.Name&quot />
<span asp-validation-for=&quotModel.Name&quot />

Age: <input asp-for=&quotModel.Age&quot />
<span asp-validation-for=&quotModel.Age&quot />

پیشرفت های DynamicRouteValueTransformer

ASP.NET Core 3.1 برای استفاده از نقطه انتهایی سفارشی سازی شده جهت انتخاب دینامیک عملکرد کنترلر MVC یا یک صفحه Razor، DynamicRouteValueTransformer را معرفی کرده است. برنامه های ASP.NET Core. 5.0 می توانند وضعیت را به یک DynamicRouteValueTransformer تبدیل کرده و مجموعه نقاط انتهایی انتخاب شده را فیلتر کنند.

سایر تغییرات

  • صفت [Compare] را می توان برای ویژگی های (Propertises) موجود در یک مدل Razor Page اعمال و پیاده سازی کرد.
  • پارامترها و خصوصیات متصل به بدنه، به طور پیش فرض لازم و ضروری در نظر گرفته می شوند.

پیشرفتهای مربوط به WebApi در Asp.net Core 5

مشخصات OpenAPI به طور پیش فرض

OpenAPI Specification یک استاندارد صنعتی است که API های HTTP را توصیف کرده و آن ها را در فرآیندهای پیچیده کسب و کار یا با اشخاص ثالث، ادغام و یکپارچه می کند. OpenAPI به طور گسترده توسط تمام ارائه دهندگان ابر و بسیاری از رجیسترهای API پشتیبانی می شود. برنامه هایی که اسناد OpenAPI را از API های وب منتشر می کنند، دارای فرصت های جدید متنوعی هستند که امکان استفاده از آن API ها را فراهم می کنند. الگوی API های ASP.NET Core در مشارکت با نگه دارندگان پروژه منبع باز Swashbuckle.AapNetCore، حاوی یک وابستگی NuGet به Swashbuckle است. Swashbuckle یک بسته منبع باز و محبوب NuGet است که اسناد OpenAPI را به شکلی دینامیک منتشر می کند. Swashbuckle این کار را با مشاهده داخلی کنترلرهای API و تولید سند OpenAPI در زمان اجرا و یا در زمان ساخت با استفاده از Swashbuckle CLI انجام می دهد.

  • غیر فعال کردن OpenAPI از طریق Cmd
dotnet new webapi --no-openapi true
  • غیر فعال کردن OpenAPI از طریق VisualStudio: علامت فعال کردن پشتیبانی OpenAPI را بردارید.

همه پرونده های .csproj ایجاد شده برای پروژه های web API حاوی مرجع پکیج نوگت Swashbuckle.AapNetCore هستند.

<ItemGroup>
    <PackageReference Include=&quotSwashbuckle.AspNetCore&quot Version=&quot5.5.1&quot />
</ItemGroup>

کد تولید شده ی الگو، حاوی کدی در Startup.ConfigureServices است که تولید اسناد OpenAPI را فعال می کند:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc(&quotv1&quot, new OpenApiInfo { Title = &quotWebApp1&quot, Version = &quotv1&quot });
    });
}

روش Startup.Configure، میان افزار Swashbuckle را جهت فعال سازی موارد زیر اضافه می کند:

  • فعال سازی پروسه تولید سند
  • فعال سازی صفحه Swagger UI به طور پیش فرض در حالت توسعه

کد تولید شده الگو، توصیف API را هنگام انتشار برای تولید، به طور تصادفی در معرض نمایش قرار نمی دهد.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseSwagger();
        app.UseSwaggerUI(c => c.SwaggerEndpoint(&quot/swagger/v1/swagger.json&quot,
                         &quotWebApp1 v1&quot));
    }

    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

Azure API Management Import

زمانیکه OpenAPI به وسیله پروژه های API ASP.NET Core فعال می شود، نسخه Visual Studio 2019 و نسخه های بعدی به طور خودکار یک مرحله اضافی را در جریان انتشار ارائه می دهند. توسعه دهندگانی که از Azure API Management استفاده می کنند، در حین جریان انتشار این فرصت را دارند که API ها را به طور خودکار به Azure API Management وارد کنند:

  • تجربه راه اندازی بهتر برای پروژه های web API
  • با فعال بودن OpenAPI به طور پیش فرض، تجربه راه اندازی برنامه (F5) برای توسعه دهندگان web API به طور قابل توجهی بهبود می یابد. در ASP.NET Core 5.0، الگوی web API برای بارگذاری صفحه Swagger UI از قبل پیکربندی شده است. صفحه Swagger UI علاوه بر فراهم کردن مستندات اضافه برای API منتشر شده، آزمایش API ها را نیز با یک کلیک امکان پذیر خواهد کرد.

توسعه و پیشرفت های Blazor در Asp.net Core 5

ما در .NET 5، با تمرکزی ویژه بر ارائه UI پیچیده و سریال سازی JSON، در عملکرد زمان اجرای Blazor WebAssemble پیشرفت قابل توجهی به وجود آورده ایم. در تست های عملکردی ما، Blazor WebAssemble در .NET 5 برای بیشتر سناریوها دو تا سه برابر سریع تر عمل می کند. جهت کسب اطلاعات بیشتر به ASP.NET Blog: ASP.NET Core updates in .NET 5 Release Candidate 1 مراجعه نمایید.

جداسازی CSS در Blazor

Blazor اکنون از تعریف سبک های CSS که محدود به یک مولفه خاص هستند، پشتیبانی می کند. سبک های CSS مختص به یک مولفه، استدلال درمورد سبک های موجود در برنامه و جلوگیری از عوارض جانبی ناخواسته سبک های جهانی را آسان تر می کنند. جهت کسب اطلاعات بیشتر به ASP.NET Core Blazor CSS isolation مراجعه نمایید.

مولفه InputFile جدید

مولفه InputFile، امکان خواندن پرونده هایی که توسط کاربران جهت بارگذاری انتخاب شده اند را فراهم می کند. برای کسب اطلاعات بیشتر به ASP.NET Core Blazor file uploads مراجعه نمایید.

مولفه های InputRadio و InputRadioGroup جدید

Blazor دارای مولفه های InputRadio و InputRadioGroup است که data binding (اتصال داده) را به گروه های radio button از طریق یک اعتبار یکپارچه، ساده تر می کند. جهت کسب اطلاعات بیشتر به ASP.NET Core Blazor forms and validation مراجعه نمایید.

مجازی سازی مولفه ها

با استفاده از فریم ورک Blazor که جهت پشتیبانی مجازی سازی، ساخته شده است، می توانید عملکرد احتمالی مولفه را بهبود ببخشید. جهت کسب اطلاعات بیشتر به ASP.NET Core Blazor forms and validation مراجعه نمایید.

پشتیبانی رویداد

رویدادهای Blazor اکنون از رویدادهای DOM پشتیبانی می کنند. جهت کسب اطلاعات بیشتر به ASP.NET Core Blazor event handlingمراجعه نمایید.

تنظیم کردن تمرکز UI در برنامه های Blazor

برای تنظیم تمرکز UI در مؤلفه مورد نظر، از روش FocusAsync استفاده نمایید. برای کسب اطلاعات بیشتر به ASP.NET Core Blazor event handling مراجعه نمایید.

صفات کلاس اعتبارسنجی سفارشی

نام های کلاس اعتبارسنجی سفارشی سازی شده، هنگامیکه با فریم ورک های CSS، ازجمله Bootstrap یکپارچه می شوند، مفید خواهند بود. جهت کسب اطلاعات بیشتر به ASP.NET Core Blazor forms and validation مراجعه نمایید.

پشتیبانی IAsyncDisposable

اکنون مولفه های Blazor جهت انتشار ناهمگام منابع تخصیص یافته، از رابط IAsyncDisposable استفاده می کنند.

جدا کردن جاوا اسکریپت و منابع هدف

Blazor جداسازی جاوا اسکریپت را در ماژول های استاندارد JavaScript امکان پذیر می کند. برای کسب اطلاعات بیشتر به Call JavaScript functions from .NET methods in ASP.NET Core Blazor مراجعه نمایید.

مولفه های فرم از Displey Name پشتیبانی می کنند

مولفه های داخلی زیر از طریق پارامتر DispleyName، از نام های نمایشگر پشتیبانی می کنند:

  • InputDate
  • InputNumber
  • InputSelect

جهت کسب اطلاعات بیشتر به ASP.NET Core Blazor forms and validation مراجعه نمایید.

پارامترهای Catch-all route

پارامترهای مسیر Catch-all که در چندین مرز پوشه، مسیرهایی را به دست می آورند، در مولفه ها پشتیبانی می شوند. جهت کسب اطلاعات بیشتر به ASP.NET Core Blazor routing مراجعه نمایید.

توسعه و پیشرفت های Debugging

در ASP.NET Core 5.0، اشکال زایی (Debugging) برنامه های Blazor WebAssembly توسعه یافته است. علاوه براین، اکنون debugging در Visual Studio برای Mac پشتیبانی می شود. جهت کسب اطلاعات بیشتر به Debug ASP.NET Core Blazor WebAssembly مراجعه نمایید.

مایکروسافت Identity v2.0 و MSAL v2.0

امنیت Blazor اکنون از مایکروسافت Identity v2.0 (Microsoft.Identity.Web and Microsoft.Identity.Web.UI) و MSAL v2.0 استفاده می کند. جهت کسب اطلاعات بیشتر به Blazor Security and Identity node مراجعه نمایید.

ذخیره سازی مرورگر محافظت شده برای سرور Blazor

برنامه های Blazor Server اکنون جهت ذخیره وضعیت برنامه در مرورگر، می توانند از پشتیبانی داخلی استفاده کنند که با بکارگیری قابلیت حفاظت داده ASP.NET Core از دستکاری شدن داده ها محافظت می کند. داده ها می توانند در local browser storage یا در session storage ذخیره سازی شوند. جهت کسب اطلاعات بیشتر به ASP.NET Core Blazor state management مراجعه نمایید.

پیش رندر Blazor WebAssembly

یکپارچگی مولفه ها در میان مدل های هاستینگ، توسعه یافته است و برنامه های Blazor WebAssemble اکنون می توانند خروجی را بر روی سرور، پیش رندر کنند.

اصلاح یا پیوند پیشرفت ها و توسعه ها

WebAssemble برای اصلاح IL غیرضروری از مجامع خروجی برنامه، اصلاح یا پیوند زبان میانی (IL) را در حین ساخت، اجرا می کند. Blazor WebAssemble با انتشار ASP.Net Core 5.0 می تواند از طریق گزینه های پیکربندی اضافی، اصلاحات بهتری را اعمال کند. جهت کسب اطلاعات بیشتر به Configure the Trimmer for ASP.NET Core Blazor and Trimming options. مراجعه نمایید.

Browser compatibility analyzer

برنامه های Blazor WebAssemble فضای .NET API را به طور کامل هدف قرار می دهند، اما همه API های .NET در WebAssemble به دلیل محدودیت های sandbox مرورگر پشتیبانی نمی شوند. API های اجرا نشده، PlatformNotSupportedException را هنگام اجرای WebAssemble پرتاب می کنند. هنگامیکه برنامه از API هایی استفاده می کند که توسط سیستم عامل های هدف پشتیبانی نمی شوند، یک تحلیلگر سازگاری پلتفرم به توسعه دهنده هشدار می دهد. جهت کسب اطلاعات بیشتر به ASP.NET Core Razor components class libraries مراجعه نمایید.

مجموعه های Lazy load

با به تعویق انداختن بارگذاری برخی از مجموعه برنامه ها، می توان عملکرد راه اندازی برنامه Blazor WebAssemble را تا زمانیکه مورد نیاز باشد، بهبود بخشید. جهت کسب اطلاعات بیشتر به Lazy load assemblies in ASP.NET Core Blazor WebAssembly مراجعه نمایید.

پشتیبانی جهانی سازی به روز شده

پشتیبانی جهانی سازی مربوط به Blazor WebAssemble بر اساس مولفه های بین المللی برایUnicode (ICD) در دسترس است.

توسعه و پیشرفت های gRPC

توسعه و پیشرفت های زیادی در gRPC پیاده سازی شده است. جهت کسب اطلااعات بیشتر به gRPC performance improvements in .NET 5 مراجعه نمایید. شما هم چنین می توانید برای کسب اطلاعات بیشتر درمورد gRPC به Introduction to gRPC on .NET Core مراجعه نمایید.

توسعه و پیشرفت های SignalR

SignalR Hub Filters

خط لوله های هاب که در ASP.NET SignalR، آن ها را فیلترهای SignalR Hub می نامند، ویژگی است که باعث می شود کد، قبل و بعد از فراخونی روش های Hub اجرا شود. اجرای کد، قبل و بعد از فراخوانی متدهای Hub شبیه به این است که middleware توانایی اجرای کد را قبل و بعد از درخواست HTTP را داشته باشد. استفاده های معمول شامل ورود به سیستم، مدیریت خطا و اعتبار سنجی آرگومان است. جهت کسب اطلاعات بیشتر به Use hub filters in ASP.NET Core SignalR مراجعه نمایید.


آموزش Asp.net Core 5 در قالب فروشگاه اینترنتی

فراخوانی SignalR parallel hub

ASP.NET Core SignalR قادر به مدیریت فراخوانی هاب Parallel شده است. رفتار پیش فرض را می توان تغییر داد تا مشتریان امکان این را داشته باشند که بیش از یک متد هاب را همزمان فراخوانی کنند.

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR(options =>
    {
        options.MaximumParallelInvocationsPerClient = 5;
    });
}

اضافه شدن پشتیبانی Messagepack در کلاینت جاوا SignalR

بسته جدید com.microsoft.signalr.messagepack، پشتیانی Messagepack را به کلاینت جاوا SignalR اضافه می کند. برای استفاده از پروتکل هاب MessagePack، .withHubProtocol(new MessagePackHubProtocol()) را به connection builder اضافه کنید.

HubConnection hubConnection = HubConnectionBuilder.create(&quothttp://localhost:53353/MyHub&quot)
       .withHubProtocol(new MessagePackHubProtocol())
       .build();

توسعه و پیشرفت های Kestrel

  • قابلیت بارگذاری نقطه انتهایی از طریق پیکربندی: Kestrel می تواند تغییرات پیکربندی منتقل شده به KestrelServerOptions.Configure را شناسایی کند و از نقاط انتهایی موجود جدا و به نقاط انتهایی جدید متصل شود، بدون اینکه هنگام صحت پارامترهای reloadOnChange نیازی به راه اندازی مجدد برنامه داشته باشید. به طور پیش فرض هنگام استفاده ConfigureWebHostDefaults و CreateDefaultBuilder، Kestrel با فعال کردن reloadOnChange به زیربخش پیکربندی &quot;Kestrel&quot; متصل می شود. برنامه ها باید هنگام فراخوانی KestrelServerOptions.Configure برای دریافت نقاط انتهایی که قابلیت بارگیری مجدد را دارند، از reloadOnChange: true اطمینان حاصل کنند.
  • پیشرفت های هدرهای پاسخگوی HTTP/2. جهت کسب اطلاعات بیشتر به Performance improvements در بخش بعدی مراجعه نمایید.
  • پشتیبانی از انواع نقاط انتهایی اضافی در سوکت های انتقال: انتقال به API جدیدی که در System.Net.Sockets معرفی شده است، انتقال پیش فرض سوکت ها در Kestrel با اضافه شدن به API جدید ارائه شده در System.Net.Sockets، امکان اتصال به هر دو دسته پرونده های موجود و سوکت های دامنه Unix را فراهم می کند.
  • پشتیبانی از اتصال به دسته های پرونده موجود امکان استفاده از یکپارچه سازی Systemd موجود بدون نیاز به حمل و نقل libuv را فراهم می کند.
  • رمزگشایی هدر سفارشی در Kestrel: برنامه ها می توانند تعیین کنند که کدگذاری برای تفسیر هدرهای ورودی بر اساس نام صفحه به جای پیش فرض در UTF-8 استفاده شود.
  • ویژگی Microsoft.AspNetCore.Server.Kestrel.KestrelServerOptions.RequestHeaderEncodingSelector را تنظیم کنید تا مشخص کند کدام Encoding استفاده می شود:
public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
      .ConfigureWebHostDefaults(webBuilder =>
      {
          webBuilder.ConfigureKestrel(options =>
          {
              options.RequestHeaderEncodingSelector = encoding =>
              {
                    return encoding switch
                    {
                        &quotHost&quot => System.Text.Encoding.Latin1,
                        _ => System.Text.Encoding.UTF8,
                    };
              };
          });
          webBuilder.UseStartup();
      });

گزینه های خاص نقطه انتهایی Kestrel از طریق پیکربندی

پشتیبانی برای پیکربندی گزینه های خاص نقطه انتهایی Kestrel از طریق configuration اضافه شده است. پیکربندی و تنظیمات خاص نقطه انتهایی شامل موارد زیر است:

  • استفاده از پروتکل های HTTP
  • استفاده از پروتکل های TLS
  • گواهی نامه منتخب
  • حالت گواهینامه کلاینت

پیکربندی اجازه می دهد تا مشخص شود کدام گواهی نامه بر اساس نام سرور مشخص شده، انتخاب شده است. نام سرور بخشی از پسوند Server Name Indication (SNI)برای پروتکل TLS است که توسط کلاینت مشخص شده است. علاوه براین، پیکربندی Kestrel از پیشوند wildcard در نام هاست نیز پشتیبانی می کند.

مثال زیر نحوه تعیین نقطه انتهایی خاص را با استفاده از یک فایل پیکربندی نشان می دهد:

{
  &quotKestrel&quot: {
    &quotEndpoints&quot: {
      &quotEndpointName&quot: {
        &quotUrl&quot: &quothttps://*&quot,
        &quotSni&quot: {
          &quota.example.org&quot: {
            &quotProtocols&quot: &quotHttp1AndHttp2&quot,
            &quotSslProtocols&quot: [ &quotTls11&quot, &quotTls12&quot],
            &quotCertificate&quot: {
              &quotPath&quot: &quottestCert.pfx&quot,
              &quotPassword&quot: &quottestPassword&quot
            },
            &quotClientCertificateMode&quot : &quotNoCertificate&quot
          },
          &quot*.example.org&quot: {
            &quotCertificate&quot: {
              &quotPath&quot: &quottestCert2.pfx&quot,
              &quotPassword&quot: &quottestPassword&quot
            }
          },
          &quot*&quot: {
            // At least one sub-property needs to exist per
            // SNI section or it cannot be discovered via
            // IConfiguration
            &quotProtocols&quot: &quotHttp1&quot,
          }
        }
      }
    }
  }
}

نمایانگر نام سرور (SNI) یک پسوند TLS است که شامل یک دامنه مجازی به عنوان بخشی از مذاکرات SSL می شود. درواقع می توان از نام دامنه مجازی یا یک نام میزبان جهت شناسایی نقطه انتهایی شبکه استفاده کرد.

بهبود عملکرد HTTP/2

  • کاهش قابل توجه تخصیص ها در مسیر کد HTTP/2
  • پشتیبانی HPack dynamic compression از هدرهای پاسخ HTTP/2 در Kestrel. جهت کسب اطلاعات بیشتر به Header table size و HPACK: the silent killer (feature) of HTTP/2مراجعه نمایید.
  • ارسال فریم های HTTP/2 PING: HTTP/2 برای ارسال فریم PING مکانیزمی دارد تا از کارایی اتصال idle اطمینان حاصل کند. اطمینان از اتصال مناسب به خصوص هنگام کار با جریان های طولانی مدت، مانند جریان های gRPC، که اغلب بیکارند و به طور متناوب شاهد فعالیت هایی هستند، بسیار مفید خواهد بود. برنامه ها با اعمال تنظیماتی در KestrelServerOptions، می توانند فریم های PING متناوب و دوره ای را در Kestrel ارسال کنند:
public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
      .ConfigureWebHostDefaults(webBuilder =>
      {
          webBuilder.ConfigureKestrel(options =>
          {
              options.Limits.Http2.KeepAlivePingInterval =
                                             TimeSpan.FromSeconds(10);
              options.Limits.Http2.KeepAlivePingTimeout =
                                             TimeSpan.FromSeconds(1);
          });
          webBuilder.UseStartup();
      });

بهبود عملکرد کانتینرها

قبل از .NET 5.0، ساخت و انتشار Dockerfile برای یک برنامه ASP.NET Core نیاز به pull کردن کل .NET Core SDK و ASP.NET Core image داشت. اما در این نسخه، pull کردن بایت های SDK images کاهش می یابد و بایت های pull شده برای ASP.NET Core image تا حد زیادی حذف می شوند. جهت کسب اطلاعات بیشتر به this GitHub issue comment مراجعه نمایید.

احراز هویت و مجوزها

احراز هویت Azure Active Directory با Microsoft.Identity.Web

الگوی پروژه های ASP.NET Core با Microsoft.Identity.Web ادغام و یکپارچه شده اند تا احراز هویت را از طریق Azure Activity Directory (Azure AD)اعمال کنند. Microsoft.Identity.Web package موارد زیر را ارائه می دهد:

  • تجربه ای بهتر برای احراز هویت از طریق Azure AD
  • روشی آسان تر جهت دسترسی به منابع Azure برای کاربران تان

به Microsoft.Identity.Web sampleمراجعه نمایید تا ببینید چه طور با لاگین اولیه آغاز به کار کرده و به واسطه چند مستاجری، بکارگیری Azure APIs، بکارگیری Microsoft Graph و محافظت APIهای تان پیشرفت می کند.

Microsoft.Identity.Web به همراه .NET 5 در دسترس است.

اجازه دادن دسترسی بی نام به یک نقطه انتهایی

متد AllowAnonymous، اجازه دسترسی ناشناس و بی نام به یک نقطه انتهایی را می دهد:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGet(&quot/&quot, async context =>
        {
            await context.Response.WriteAsync(&quotHello World!&quot);
        })
        .AllowAnonymous();
    });
}

رسیدگی سفارشی به خطاهای مجوز

مدیریت سفارشی خطاهای مجوز از طریق خط اتصال جدید IAuthorizationMiddlewareResultHandler که توسط مجوز authorization Middleware فراخوانی شده است، آسان تر است. اجرای پیش فرض، ثابت باقی مانده است، اما یک کنترلر سفارشی می تواند در تزریق وابستگی که اجازه می دهد پاسخ های سفارشی HTTP بر اساس عدم موفقیت مجوز باشد، ثبت شود. به this sample که کاربرد IAuthorizationMiddlewareResultHandler را نشان می دهد، مراجعه نمایید.

مجوز زمان استفاده از مسیریابی نقطه انتهایی

مجوز زمان استفاده از مسریابی نقطه انتهایی اکنون HttpContext را به جای نمونه نقطه انتهایی دریافت می کند. این موضوع به میان افزار مجوز اجازه می دهد به RouteData و سایر ویژگی های HttpContext که از طریق کلاس Endpoint قابل دسترسی نبودند، دسترسی پیدا کند. با استفاده از context.GetEndpoint می توان نقطه انتهایی را از context دریافت کرد.

کنترل دسترسی مبتنی بر نقش از طریق احراز هویت Kerberos و LDAP در Linux

به Kerberos authentication and role-based access control (RBAC) مراجعه نمایید.

توسعه و پیشرفت های API

روش های توسعه JSON برای HttpRequest و HttpResponse

با استفاده از روش های توسعه ReadFromJsonAsync و WriteAsJsonAsync جدید می توان داده های JSON را از طریق HttpRequest و HttpResponse نوشت و خواند. این روش های توسعه برای رسیدگی به داده های JSON از مجموعه ساز System.Text.Json استفاده می کنند. روش توسعه HasJsonContentType جدید، همچنین می تواند وجود محتوای JSON در درخواست را نیز بررسی کند.

روش های توسعه JSON را می توان با مسیریابی نقطه انتهایی ترکیب کرد و JSON API را به سبکی از برنامه نویسی که کدگذاری مسیر نامیده می شود، ایجاد کرد. این روش، گزینه ای جدید برای توسعه دهندگانی است که می خواهند API های اصلی JSON را به روشی سبک ایجاد کنند. به عنوان مثال، یک برنامه وب که تعداد کمی نقطه انتهایی دارد ممکن است برای کدگذاری به جای استفاده از عملکرد کامل ASP.NET Core MVC، ترجیح دهد از Rout استفاده کند.

endpoints.MapGet(&quot/weather/{city:alpha}&quot, async context =>
{
    var city = (string)context.Request.RouteValues[&quotcity&quot];
    var weather = GetFromDatabase(city);

    await context.Response.WriteAsJsonAsync(weather);
});

جهت کسب اطلاعات بیشتر در مورد روش های جدید توسعه JSON و مسیر کدگذاری، به this .NET show مراجعه نمایید.

System.Diagnostics.Activity

اکنون System.Diagnostics.Activity به طور پیش فرض با فرمت W3C تنظیم شده است. این امر باعث می شود پشتیبانی ردیابی توزیع شده در ASP.NET Core، بصورت پیش فرض با فریم ورک های بیشتری قابلیت همکاری داشته باشد.

FromBodyAttribute

FromBodyAttribute پیکربندی گزینه ای را پشتیبانی می کند که اجازه می دهد این پارامترها یا خصوصیات به شکل انتخابی و اختیاری در نظر گرفته شوند:

public IActionResult Post([FromBody(EmptyBodyBehavior = EmptyBodyBehavior.Allow)]MyModel model) {
     ...
}

سایر پیشرفت ها در Asp.net Core 5

ما شروع به اجرای nullable annotations در مجموعه های ASP.NET Core کرده ایم و قصد داریم بیشتر سطح عمومی API فریم ورک .NET 5 را حاشیه نویسی کنیم.

کنترل فعال سازی کلاس Startup

یک اضافه بار UseStartup، افزوده شده است که اجازه می دهد یک برنامه، روشی کارخانه ای برای کنترل فعال سازی کلاس Startup ارائه دهد. کنترل فعال سازی کلاس Startup برای انتقال پارامترهای اضافی به Startup که همراه با هاست آغاز به کار می کنند، مفید است:

public class Program
{
    public static async Task Main(string[] args)
    {
        var logger = CreateLogger();
        var host = Host.CreateDefaultBuilder()
            .ConfigureWebHost(builder =>
            {
                builder.UseStartup(context => new Startup(logger));
            })
            .Build();

        await host.RunAsync();
    }
}

رفرش خودکار از طریق ساعت dotnet

در .NET 5، اجرای dotnet watch در یک پروژه ASP.NET، می تواند مرورگر پیش فرض را راه اندازی کند و با ایجاد تغییرات در کد، باعث رفرش شدن خودکار مرورگر نیز خواهد شد. درواقع شما می توانید به موارد زیر دست یابید:

  • باز کردن یک پروژه ASP.NET Core در یک ویرایشگر متن
  • راه اندازی و اجرای dotnet watch
  • در حالی که این ابزار به بازسازی، راه اندازی مجدد و بارگیری مجدد برنامه می پردازد، شما می توانید روی تغییرات کد تمرکز کنید.

امیدواریم در آینده بتوانیم قابلیت بازخوانی خودکار را به Visual Studio بیاوریم.

Console Logger Formatter

در ارائه دهنده ورود به کنسول در کتابخانه Microsoft.Extensions.Logging بهبودهایی اعمال شده است. اکنون توسعه دهندگان می توانند برای اعمال کنترل کامل بر قالب بندی و رنگ آمیزی خروجی کنسول، از یک ConsoleFormatter سفارشی استفاده کنند. API های قالب ساز با اجرای زیرمجموعه ای از رشته های VT-100 escape، امکان قالب بندی غنی را فراهم می کنند. VT-100 توسط اکثر ترمینال های مدرن پشتیبانی می شود. ثبت کننده کنسول می تواند رشته های escape را در ترمینال های پشتیبانی نشده، تجزیه و تحلیل کند و به توسعه دهندگان اجازه می دهد یک قالب واحد برای همه ترمینال ها ایجاد کنند.

JSON Console Logger

علاوه بر پشتیبانی از قالب سازهای سفارشی، ما قالب ساز داخلی JSON را نیز اضافه کرده ایم که ثبت وقایع مربوط به ساختار JSON را به کنسول منتشر می کند. کد زیر نحوه تغییر از logger پیش فرض به JSON را نشان می دهد:

public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
  .ConfigureLogging(logging =>
  {
     logging.AddJsonConsole(options =>
     {
         options.JsonWriterOptions = new JsonWriterOptions()
         { Indented = true };
     });
  })
  .ConfigureWebHostDefaults(webBuilder =>
  {
    webBuilder.UseStartup();
  });

پیام های ورودی منتشر شده به کنسول، با فرمت JSON هستند:

{
  &quotEventId&quot: 0,
  &quotLogLevel&quot: &quotInformation&quot,
  &quotCategory&quot: &quotMicrosoft.Hosting.Lifetime&quot,
  &quotMessage&quot: &quotNow listening on: https://localhost:5001&quot,
  &quotState&quot: {
    &quotMessage&quot: &quotNow listening on: https://localhost:5001&quot,
    &quotaddress&quot: &quothttps://localhost:5001&quot,
    &quot{OriginalFormat}&quot: &quotNow listening on: {address}&quot
  }
}
آموزش Asp.net Core 5 در قالب فروشگاه اینترنتی