۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

نحوه ایجاد یک ارائه دهنده پیکربندی سفارشی در ASP.NET Core 6

ارائه دهندگان پیکربندی هسته ASP.NET داده های پیکربندی را از منابع رایج مانند فایل های JSON و پایگاه داده می خوانند. اما می توانید با ایجاد ارائه دهندگان پیکربندی سفارشی از منابع دیگر استفاده کنید.

ارائه دهندگان پیکربندی هسته ASP.NET داده های پیکربندی را از منابع رایج مانند فایل های JSON و پایگاه داده می خوانند. اما می توانید با ایجاد ارائه دهندگان پیکربندی سفارشی از منابع دیگر استفاده کنید.

ما از ارائه دهندگان پیکربندی در ASP.NET Core برای بارگذاری داده های پیکربندی در برنامه خود از یک یا چند منبع پیکربندی استفاده می کنیم. این ارائه‌دهندگان می‌توانند داده‌های پیکربندی را از آرگومان‌های خط فرمان، متغیرهای محیطی، فایل‌های JSON یا XML، پایگاه‌های داده، Azure Key Vault و منابع دیگر—از جمله منابع سفارشی خودتان بخوانند.

سیستم پیکربندی ASP.NET Core شامل مجموعه ای از کلاس ها است که مدیریت تنظیمات پیکربندی برنامه شما را آسان تر می کند. این سیستم سبک و قابل توسعه است و راهی ثابت برای ذخیره و بازیابی تنظیمات پیکربندی برای همه برنامه‌های ASP.NET Core فراهم می‌کند.

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

این مقاله بحثی را در مورد چگونگی ایجاد یک ارائه دهنده پیکربندی سفارشی در ASP.NET Core 6 ارائه می دهد. برای کار با نمونه کد ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخه‌ای ندارید، می‌توانید Visual Studio 2022 را از اینجا بارگیری کنید.

یک پروژه ASP.NET Core 6 Web API در Visual Studio 2022 ایجاد کنید

ابتدا، اجازه دهید یک پروژه ASP.NET Core در Visual Studio 2022 ایجاد کنیم. با دنبال کردن این مراحل، یک پروژه ASP.NET Core 6 Web API جدید در Visual Studio 2022 ایجاد می شود:

  1. Visual Studio 2022 IDE را راه اندازی کنید.
  2. روی “ایجاد پروژه جدید” کلیک کنید.
  3. در پنجره “ایجاد پروژه جدید”، “ASP.NET Core Web API” را از لیست الگوهای نمایش داده شده انتخاب کنید.
  4. بعدی را کلیک کنید.
  5. در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
  6. به صورت اختیاری، بسته به تنظیمات برگزیده خود، کادر انتخاب «قرار دادن راه حل و پروژه در یک فهرست راهنمای» را علامت بزنید.
  7. بعدی را کلیک کنید.
  8. در پنجره “اطلاعات اضافی” نشان داده شده در ادامه، .NET 6.0 را به عنوان چارچوب هدف از لیست کشویی در بالا انتخاب کنید. تنظیم «نوع احراز هویت» را روی «هیچ» (پیش‌فرض) بگذارید.
  9. مطمئن شوید که چک باکس‌های «Enable Docker»، «Configure for HTTPS» و «Enable Open API Support» علامت نخورده باشند زیرا ما در اینجا از هیچ یک از این ویژگی‌ها استفاده نخواهیم کرد.
  10. روی ایجاد کلیک کنید.
چگونه دروازه های API مکمل ESB ها هستند

ما از این پروژه ASP.NET Core 6 Web API برای ایجاد یک ارائه دهنده پیکربندی سفارشی در بخش های بعدی این مقاله استفاده خواهیم کرد.

ایجاد ارائه دهندگان پیکربندی در ASP.NET Core 6

ارائه‌دهنده پیکربندی معمولاً یک کلاس C# است که می‌تواند داده‌های پیکربندی را از یک منبع (یک فایل، یک پایگاه داده، یک API خارجی و غیره) بازیابی کند و آن‌ها را در دسترس برنامه قرار دهد. بسیاری از ارائه دهندگان پیکربندی داخلی در ASP.NET Core از جمله JSON، XML و ارائه دهندگان پایگاه داده وجود دارد. با این حال، در صورت نیاز می توانید ارائه دهنده پیکربندی سفارشی خود را نیز ایجاد کنید.

برای ایجاد یک ارائه دهنده پیکربندی سفارشی، باید کلاسی ایجاد کنید که کلاس ConfigurationProvider را گسترش دهد. سپس، باید روش Load() را نادیده بگیرید تا داده‌های پیکربندی را از هر کجا که ذخیره می‌شود بارگیری کنید و داده‌ها را به‌عنوان فرهنگ لغت کلید-مقدار برگردانید.

هنگامی که ارائه دهنده پیکربندی سفارشی خود را ایجاد کردید، می توانید آن را با ASP.NET Core با افزودن آن به مجموعه خدمات در فایل Program.cs ثبت کنید.

ارائه دهنده پیکربندی سفارشی 01

شکل ۱. پنجره Solution Explorer برنامه تکمیل شده.

بیایید اکنون شروع به ساخت یک ارائه دهنده پیکربندی سفارشی در ASP.NET 6 Core کنیم. راه حل نهایی شامل فایل های زیر خواهد بود:

  • SecurityMetadata.cs
  • CustomConfigurationSource.cs
  • CustomConfigurationProvider.cs
  • CustomConfigurationExtensions.cs
  • CustomConfigurationController.cs

در بخش‌های بعدی با هر یک از این فایل‌ها آشنا می‌شویم. علاوه بر این، ما همچنین کدی را در فایل Program.cs می نویسیم تا ارائه دهنده پیکربندی و منبع پیکربندی را به سیستم پیکربندی پیش فرض زمان اجرا ASP.NET Core اضافه کنیم. پنجره Solution Explorer برنامه تکمیل شده باید همانطور که در شکل ۱ در بالا نشان داده شده است ظاهر شود.

یک کلاس برای ابرداده امنیتی در ASP.NET Core 6 ایجاد کنید

کلیدهای API و اسرار API را در یک فایل json. ذخیره می‌کنیم و آن را در برنامه‌ای که در اینجا می‌سازیم می‌خوانیم. ما از هیچ یک از این کلیدها برای احراز هویت یا تأیید درخواست‌ها در این مثال استفاده نخواهیم کرد.

کلیدهای API و رازهای API هر دو برای تأیید اعتبار دسترسی به یک API استفاده می‌شوند. تفاوت اصلی این است که کلیدهای API عمومی هستند و همه می توانند به آنها دسترسی داشته باشند، در حالی که اسرار API خصوصی هستند و هرگز نباید به اشتراک گذاشته شوند. یک کلید API شناسه‌ای است که به شما امکان می‌دهد با یک API به روشی امن تعامل داشته باشید.

مقدمه Hapi: چارچوب Node.js

کلیدهای API برای محدود کردن افرادی که می توانند از یک برنامه کاربردی استفاده کنند و کارهایی که می توانند با آن انجام دهند استفاده می شود. به عنوان مثال، آنها برای احراز هویت و تأیید درخواست ها استفاده می شوند. اسرار API برای ذخیره اطلاعات حساس در برنامه شما استفاده می شود. همچنین می‌توانید از اسرار API برای تولید جمع‌های چک و رمزگذاری و رمزگشایی داده‌ها استفاده کنید.

یک کلاس با نام SecurityMetadata در فایلی با همین نام با پسوند cs ایجاد کنید و کد زیر را وارد کنید.

   public class SecurityMetadata
    {
        public string ApiKey { get; set; }        
        public string ApiSecret { get; set; }
    }

یک کلاس برای منبع پیکربندی در ASP.NET Core 6 ایجاد کنید

در مرحله بعد، ما یک منبع پیکربندی برای مقداردهی اولیه ارائه دهنده پیکربندی سفارشی خود ایجاد می کنیم. برای انجام این کار، یک فایل .cs جدید با نام CustomConfigurationSource ایجاد کنید و کد زیر را به آن بدهید.

    public class CustomConfigurationSource : IConfigurationSource
    {
        public IConfigurationProvider Build(IConfigurationBuilder builder)
        {
            return new CustomConfigurationProvider();
        }
    }

منبع پیکربندی سفارشی شما باید رابط IConfigurationSource را پیاده سازی کند. رابط IConfigurationSource حاوی روش ساخت است که در آن باید ارائه دهنده پیکربندی سفارشی خود را فراخوانی کنید.

یک ارائه دهنده پیکربندی سفارشی در ASP.NET Core 6 ایجاد کنید

برای خواندن اطلاعات پیکربندی از یک منبع داده خارجی، باید ارائه دهنده پیکربندی سفارشی خود را پیاده سازی کنید. ارائه دهنده پیکربندی سفارشی شما یک کلاس C# معمولی است که کلاس انتزاعی Microsoft.Extensions.Configuration.ConfigurationProvider را گسترش می دهد و روش Load() را همانطور که در لیست کد زیر نشان داده شده است لغو می کند.

    public class CustomConfigurationProvider :
    Microsoft.Extensions.Configuration.ConfigurationProvider
    {
        public override void Load()
        {
            var text = File.ReadAllText(@"D:\SecurityMetadata.json");
            var options = new JsonSerializerOptions
            { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
            var content = JsonSerializer.Deserialize<SecurityMetadata>
           (text, options);
            if (content != null)
            {
                Data = new Dictionary<string, string>
                {
                    {"ApiKey", content.ApiKey},
                    {"ApiSecret", content.ApiSecret}
                };
            }
        }
    }

توجه داشته باشید که چگونه ApiKey و ApiSecret در نمونه فرهنگ لغت به نام Data ذخیره می شوند.

API چیست؟ رابط های برنامه نویسی کاربردی توضیح داده شده است

یک کلاس افزونه های پیکربندی سفارشی در ASP.NET Core 6 ایجاد کنید

اکنون یک متد افزونه ایجاد می کنیم که نمونه ای از کلاس CustomConfigurationSource را ایجاد کرده و آن را برمی گرداند.

    public static class CustomConfigurationExtensions
    {
        public static IConfigurationBuilder AddSecurityConfiguration
        (this IConfigurationBuilder builder)
        {
            return builder.Add(new CustomConfigurationSource());
        }
    }

منبع پیکربندی سفارشی را به Program.cs در ASP.NET Core 6 اضافه کنید

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

builder.Configuration.AddSecurityConfiguration();

لیست کد کامل فایل Program.cs برای مرجع شما در زیر آمده است.

using CustomConfigurationProvider;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Configuration.AddSecurityConfiguration();
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.UseAuthorization();
app.MapControllers();
app.Run();

یک کنترلر پیکربندی سفارشی در ASP.NET Core 6 ایجاد کنید

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

    [Route("api/[controller]")]
    [ApiController]
    public class CustomConfigurationController : ControllerBase
    {
        private readonly IConfiguration _configuration;
        public CustomConfigurationController(IConfiguration configuration)
        {
            _configuration = configuration;
        }
        [HttpGet]
        public IActionResult Get()
        {
            var metadata = new SecurityMetadata
            {
                ApiKey = _configuration["ApiKey"],
                ApiSecret = _configuration["ApiSecret"]
            };
            return Ok(metadata);
        }
    }

به نحوه تزریق نمونه IConfiguration در سازنده کلاس CustomConfigurationController توجه کنید.

اگر اکنون برنامه را اجرا کنید و نقطه پایانی HttpGet CustomConfigurationController را بزنید، باید مشاهده کنید که داده های پیکربندی پس از خواندن از فایل json. در سیستم فایل بازگردانده می شود. برای بررسی این موضوع، همانطور که در شکل ۲ در زیر نشان داده شده است، در روش عمل HttpGet در CustomConfigurationController یک نقطه شکست تنظیم کنید.

ارائه دهنده پیکربندی سفارشی 02

شکل ۲. ApiKey و ApiSecret از روش عمل HttpGet برگردانده می شوند.

در این پست ما یک ارائه دهنده پیکربندی سفارشی را پیاده سازی کرده ایم که می تواند داده های پیکربندی را از یک فایل json. بخواند. توجه داشته باشید که ما برنامه را مستقیماً از Visual Studio 2022 IDE اجرا کرده‌ایم و برای بررسی اینکه آیا داده‌های پیکربندی به درستی برگردانده شده‌اند یا خیر، یک نقطه شکست تعیین کرده‌ایم. یا می‌توانید برنامه را با استفاده از Postman، Fiddler یا Swagger UI اجرا کنید.