اشتراکها
نگاهی به ویژگیهای احتمالی C# 9.0
نکته تکمیلی
از Net 3. به بعد به جای واسط IHostingEnvironment از IHostEnvironment استفاده شود.
اطلاعات بیشتر ( + )
IHostingEnvironment
is one of the most annoying interfaces in .NET Core 2.x, because it exists in two different namespaces, Microsoft.AspNetCore.Hosting and Microsoft.Extensions.Hosting . These are slightly different and are incompatible - one does not inherit from the other.
اشتراکها
انتشار اولین پیشنمایش ASP.NET 8
.NET 8 Preview 1 is now available! This is the first preview of the next major version of .NET, which will include the next wave of innovations for web development with ASP.NET Core.
In .NET 8 we plan to make broad investments across ASP.NET Core. Below are some of the areas we plan to focus on:
نحوه کار مکانیزم مسیریابی به این صورت است که ما Route هایمان را مثلا درون میانافزار MVC (توسط متد UseMvc) تعریف میکنیم و زمانیکه یک درخواست به میانافزار MVC میرسد، این میانافزار بر اساس اطلاعات Url و Routeهای تعریف شده، اولین Route ایی را که همخوانی داشته باشد، انتخاب کرده و مقادیر مسیر یابی (RouteValues) را استخراج میکند و بدین ترتیب میفهمد که کدام Controller و Action باید فراخوانی شود.
در Pipeline چون میانافزارها به صورت ترتیبی اجرا میشوند، تا زمانیکه درخواست ما به میانافزار MVC (منظور جایی است که Routeها تعریف شدهاند؛ ولی برای درک بهتر با میانافزار MVC مثال میزنیم) نمیتوانیم از RouteValues استفاده کنیم.
مشکل جایی پیش میآید که مثلا برای وبسایتهای چند زبانه که بر اساس Url کار میکنند (مثلا fa/home/index) نیاز داریم قبل از رسیدن به میانافزار MVC، زبان جاری (همان fa) را توسط سیستم مسیریابی بخوانیم و Culture برنامه را تغییر بدهیم ولی تا زمانیکه به میانافزار MVC نرسیم این کار امکان پذیر نیست.
یک مثال دیگر آن، استفاده از ویژگی EnableCorsAttribute (است که بر خلاف UseCors که مکانیزم CORS را به صورت سراسری اعمال میکند) میتوان آن را بر روی یک Action خاص اعمال کرد.
از آنجایی که در مکانیزم مسیریابی قبلی، سیستم Routing بسیار وابسته به MVC است، ما نمیتوانیم قبل از رسیدن به میانافزار MVC، جلوی درخواستهای غیر مجاز را بگیریم، چرا که به Routing درسترسی نداریم و نمیدانیم کدام Controller و Action قرار است فراخوانی بشود.
اما در مکانیزم Endpoint Routing، وقتی یک درخواست میآید، همان ابتدا مشخص میشود که به کدام Route نگاشت شده؛ درنتیجه بقیهی میانافزارهای قبل از MVC هم میتوانند از سیستم Routing استفاده کرده و اطلاعات داخل Url را درک کنند.
این قابلیت در ASP Core 2.2، اوایل با نام Dispatcher معرفی شد که بعدا به Endpoint Routing تغییر نام پیدا کرد و به صورت پیشفرض توسط SetCompatibilityVersion ورژن Version_2_2 به بالا فعال میشود.
برای استفاده از Endpoint Routing باید میانافزار مربوطه را توسط متد UseEndpointRouting اضافه کنیم. کار این میانافزار تشخیص Endpoint مورد نظر براساس Url درخواستی و Routeهای تعریف شده است و پس از آن میتوانیم از مقادیر مسیریابی (RouteValues) استفاده کنیم (حتی قبل از رسیدن به محل تعریف Route ها).
// ASP.NET Core 2.2 public void Configure(IApplicationBuilder app) { app.UseEndpointRouting(); app.OtherMiddleware(); // Access to route values app.UseMvc(); }
نکته : در ASPNET Core 3.0 متد UseEndpointRouting به UseRouting تغییر نام پیدا کرد و نیز تعریف Route (بهتر است بگوییم Endpoint ها) به شکل زیر تغییر پیدا کرده است.
// ASP.NET Core 3.0 public void Configure(IApplicationBuilder app) { app.UseRouting(); app.OtherMiddleware(); app.UseEndpoints(endpoints => { // Mapping of endpoints goes here: endpoints.MapControllers() endpoints.MapRazorPages() endpoints.MapHub<MyChatHub>() endpoints.MapGrpcService<MyCalculatorService>() }); }
برای غیر فعال کردن قابلیت Endpoint Routing میتوانید توسط MvcOptions.EnableEndpointRouting = false آن را غیرفعال کنید.
منابع و اطلاعات بیشتر:
اشتراکها
کتاب مقدمهای بر ASP.NET Core 2.0
بازخوردهای دوره
آشنایی با AOP Interceptors
راهکاری برای پیاده سازی این دوره در ASP.NET Core بدون استفاده از StructureMap یا هر IoC Container دیگر و فقط به کمک IoC Container توکار ASP.NET Core هست ؟ در غیر این صورت کدام Container را پیشنهاد میدهید ؟
نظرات اشتراکها
تعدادی از راهحلهای E-commerce مخصوص ASP.NET Core
NET Core. نیست. (+)