برنامههای امروزی، ممکن است به چندین Web API مستقل، تبدیل شده و سپس برنامههایی (Front-ends) جدای از آنها برای کار با آنها ایجاد شوند. بنابراین این وظیفهی برنامههای Web API است که مطمئن شوند کلاینتها قادر به تعامل با آنها هستند. CORS استانداردی است که یک چنین امکانی را مهیا میکند.
CORS چیست؟
CORS و یا cross origin resource sharing، یک مکانیزم امنیتی است که در تمام مرورگرهای جدید جهت جلوگیری از ...
فرض کنید اکشن متدی را به صورت زیر تعریف کردهاید: namespace MvcHealthCheckTest.Controllers
{
public class HomeController : Controller
{
public IActionResult ViewDetails()
{
return View();
}
زمانیکه لینکی را برای آن تعریف میکنید: <a asp-controller="Home" asp-action="ViewDetails">View Details</a>
در حین رندر نهایی آن، چنین شکلی را پیدا میکند (قسمت ViewD ...
از زمان ASP.NET Core 2.1، قابلیت جدیدی به نام Generic Host، به آن اضافه شدهاست که از آن میتوان برای انجام کارهای متداول پس زمینه، مانند ارسال ایمیلهای خبرنامهی یک برنامه، تهیه فایلهای پشتیبان و غیره استفاده کرد.
Generic Host چیست؟
Generic Host یکی از ویژگیهای جدید ASP.NET Core 2.1 است. هدف آن جداسازی HTTP pipeline برنامه، از Web Host API آن است. یکی از مزایای اینکار، امکان استفادهی از آن نه فقط در پروژههای ...
ASP.NET Core 2.2 به همراه تعدادی قابلیت جدید است که یکی از آنها بررسی سلامت برنامه یا Health Check نام دارد. در بسیاری از اوقات ممکن است از سرویسهای ping و یا درخواست مشاهدهی صفحات وب سایت در بازههای زمانی مشخصی، جهت اطمینان حاصل کردن از برپایی و سلامت آن استفاده کنید. اما این سرویسها الزاما وضعیت سلامت برنامه را نمیتوانند به خوبی گزارش کنند. به همین جهت امکان ارائهی گزارشهای دقیقتری توسط ویژگی Health Check به ASP.NET Core اضافه ش ...
در قسمت قبل ، نحوهی پیاده سازی الگوی Decorator را با استفاده از امکانات تزریق وابستگیهای NET Core. بررسی کردیم؛ اما ... این روزها کسی Decoratorها را دستی ایجاد نمیکند. یعنی اگر قرار باشد به ازای هر کلاسی و هر سرویسی، یکبار کلاس Decorator آنرا با پیاده سازی همان اینترفیس سرویس اصلی و فراخوانی دستی تک تک متدهای سرویس اصلی تزریق شدهی در سازندهی آن انجام دهیم، آنچنان کاربردی به نظر نمیرسد. به همین منظور کتابخانههایی تحت عنوان Dynamic ...
الگوی decorator، امکان محصور کردن یک شیء مفروض را با لایهای بر فراز آن میسر میکند. برای مثال بجای اینکه در تمام متدهای سرویسی از try/catch استفاده کنیم، میتوانیم این متدها را با یک ExceptionHandlingDecorator مزین کنیم و یا از این دست اعمال تکراری میتوان به لاگ کردن ورودی و خروجیهای یک متد و یا کش کردن اطلاعات آنها نیز اشاره کرد. حتی عملیاتی مانند تشخیص خواص تغییر یافتهی یک شیء در Entity framework نیز به کمک همین مزین کنندهها که شیء ...
فرض کنید در برنامهی خود، یک سرویس جنریک را طراحی کردهاید. برای مثال خود ASP.NET Core به همراه سرویس جنریک <ILogger<T است و اگر برای نمونه بخواهیم آنرا در سازندهی کنترلری مانند ValuesController تزریق کنیم، نحوهی تعریف آن به صورت <ILogger<ValuesController خواهد بود. هر چند تنظیمات این سرویس پیشتر انجام شدهاست، اما اگر بخواهیم آنرا به همین نحو <ILogger<T به متدهایی مانند services.AddScoped معرفی کنیم، کار نمیکند؛ نمو ...
قابلیتهای قرار گرفتهی در اسمبلی Microsoft.Extensions.DependencyInjection که پایهی تزریق وابستگیهای برنامههای مبتنی بر NET Core. را ارائه میدهد، برای پیاده سازی اکثر پروژهها کافی است. اما اگر از نگارشهای پیشین ASP.NET MVC به ASP.NET Core مهاجرت کرده باشید، حتما با قابلیتهای ویژهی اسکن اسمبلیهای موجود در IoC Containers ثالث، جهت ساده سازی معرفی سرویسهای برنامه به سیستم تزریق وابستگیها، آشنایی دارید. برای مثال StructureMap قابلیت ...
فرض کنید قرارداد IService را تدارک دیدهاید و بر اساس آن سرویسهای A و B را به سیستم تزریق وابستگیهای برنامههای NET Core. تزریق کردهاید (برای مثال در برنامه دو DbContext را تعریف کردهاید و یک اینترفیس IUnitOfWork را دارید). اکنون اگر از این سیستم، یک پیاده سازی IService را درخواست کنید، چه اتفاقی رخ میدهد؟ در حالت معمول آن، آخرین سرویسی را که ثبت کردهاید، یعنی وهلهای از سرویس B را بازگشت خواهد داد. در ادامه قصد داریم با این قابلیت ا ...
روش متداول کار با تزریق وابستگیهای برنامههای مبتنی بر NET Core.، عموما با ثبت و معرفی یک سرویس به صورت زیر، توسط متدهای AddTransient، AddSingleton و AddScoped است: public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddTransient<ICustomerService, DefaultCustomerService>();
// ...
}
}
و سپس است ...