با استفاده از ارائه دهنده پیکربندی کلید در هر پرونده-جامعه Dev

مقدمه
بیاموزید که چگونه از دایرکتوری با پرونده هایی استفاده کنید که یک کلید در هر پرونده و محتوای پرونده را به عنوان مقدار نشان می دهد. این پرونده ها متفاوت از خواندن مقادیر کلیدی از AppSettings.json استفاده نمی شوند.
فایده این است که ، هنگامی که به درستی انجام شود ، محافظت از دایرکتوری از کنجکاوی کاربران سطح بالاتری از امنیت را فراهم می کند. کلیه برنامه های کاربردی موجود در نمونه کارها یک تیم ، نیازی به این اطلاعات در پرونده برنامه AppSettings.json خود ندارند.
مستندات ارائه دهنده پیکربندی کلیدی در هر پرونده
دستورالعمل اسناد مربوط به سناریوهای میزبانی Docker است ، در حالی که در اینجا ، از Docker منحرف می شود ، نحوه استفاده از ارائه دهنده پیکربندی کلید در هر پرونده را برای سرورهای ویندوز و دسک تاپ ویندوز نشان می دهد.
کد منبع 9 خالص
مرحله 1
یک مکان امن را تعیین کنید که شامل پرونده هایی برای مقادیر کلیدی باشد ، و به دنبال آن قرار دادن مکان در یک متغیر محیط یا همانطور که در اینجا انجام می شود ، در AppSettings.json انجام می شود. برای دسترسی به مقادیر کلیدی ، یک مدل مطابق شکل زیر مورد نیاز است. توجه داشته باشید DirectoryOptions.Key بعداً در Progam.cs استفاده می شود تا به پروژه اصلی ASP.NET ما بگوید تا در مورد این مدل بدانید.
مرحله 2
یک اعتبار سنج را برای استفاده با ValidAtonStart ایجاد کنید که وجود دایرکتوری ارزش کلیدی را بررسی می کند. در صورت تمایل ، این امر می تواند برای اطمینان از وجود پرونده های کلیدی گسترش یابد.
public class DirectoryValidator : IValidateOptions<DirectoryOptions>
{
public ValidateOptionsResult Validate(string? name, DirectoryOptions options)
{
if (string.IsNullOrEmpty(options.DirectoryPath))
{
return ValidateOptionsResult.Fail("Directory path cannot be empty.");
}
return !Directory.Exists(options.DirectoryPath) ?
ValidateOptionsResult.Fail($"Directory does not exist: {options.DirectoryPath}") :
ValidateOptionsResult.Success;
}
}
مرحله 3
در برنامه. cs موارد زیر را اضافه کنید.
builder.Services.Configure<DirectoryOptions>(builder.Configuration.GetSection(DirectoryOptions.Key));
builder.Services.AddSingleton<IValidateOptions<DirectoryOptions>, DirectoryValidator>();
// Enable validation on application startup
builder.Services.AddOptions<DirectoryOptions>().ValidateOnStart();
var directoryOptions = builder.Configuration.GetSection(DirectoryOptions.Key)
.Get<DirectoryOptions>();
var secretsPath = directoryOptions!.DirectoryPath;
// Add Key-per-file configuration provider
builder.Configuration.AddKeyPerFile(directoryPath: secretsPath, optional: true);
builder.Services.Configure<HelpDesk>(builder.Configuration);
builder.Services.Configure<Connections>(builder.Configuration);
کد فوق موارد زیر را انجام می دهد.
- خدمات ثبت نام برای دایرکتوری ها.
- اعتبار سنجی را برای اعتبارسنجی پوشه موجود که به آن N ValidateOnstart گفته می شود ، ثبت کنید.
- Setup ValidateOnstart.
- بخش DirectoryOptions را اضافه کنید تا ما برای خواندن فهرست دایرکتوری ارزش کلیدی از AppSettings.json به آن دسترسی داشته باشیم.
- ارائه دهنده پیکربندی کلید در هر پرونده را اضافه کنید
- مدلهایی را اضافه کنید که اطلاعات را از پرونده ها در پوشه Key Value ذخیره می کنند.
مرحله 4
این برای ایجاد پرونده هایی است که نام پرونده بدون پسوند نشان دهنده یک ویژگی و محتوای مقدار باشد. مستندات مایکروسافت در نام پرونده مورد استفاده متفاوت است. Double Infercore (__) به عنوان یک تعیین کننده کلید پیکربندی در نام پرونده ها استفاده می شود ، که در خارج از Docker کار نمی کند. قطعه های کد در وب وجود دارد که با این مخالف هستند اما کار نمی کنند.
مدل
از مدل های زیر استفاده می شود.
public class HelpDesk
{
public string Phone { get; set; }
public string Email { get; set; }
}
public class Connections
{
public string ConnectionString { get; set; }
}
پرونده ها برای مدل ها
- ایمیل برای کمک به محتویات serviceesk@somecompany.net
- تلفن برای کمک به محتویات 555-555-1234
- اتصال برای اتصالات با یک رشته اتصال
در کد منبع ارائه شده در پوشه پروژه ، پرونده های فوق را برای پرونده های ارزش کلید در فهرست کپی کنید. برای یک برنامه واقعی ، این پرونده ها به یک مخزن GitHub منتقل نمی شوند و بخشی از پروژه نخواهند بود.
کد صفحه فهرست در پشت
از سازنده اصلی استفاده می کند. تنظیم مقادیر ملک مورد نیاز.
public class IndexModel(IOptions<HelpDesk> helpDeskOptions, IOptions<Connections> connections) : PageModel
{
private readonly HelpDesk _helpDesk = helpDeskOptions.Value;
private readonly Connections _connections = connections.Value;
public string Phone { get; private set; }
public string Email { get; private set; }
public string ConnectionString { get; private set; }
public void OnGet()
{
Phone = _helpDesk.Phone;
Email = _helpDesk.Email;
ConnectionString = _connections.ConnectionString;
}
}
صفحه فهرست فهرست
class="container">
class="container d-flex justify-content-center">
class="card shadow mt-5" style="width: 48rem;">
class="card-body">
class="fw-bold">Phone: @Model.Phone
class="fw-bold">Email: @Model.Email
class="fw-bold">Connection string: @Model.ConnectionString
خلاصه
اطلاعاتی برای استفاده از ارائه دهنده پیکربندی کلید در هر پرونده ارائه شده است که به شما امکان می دهد اطلاعات مورد نیاز برای چندین برنامه را در یک پوشه نگه دارید.
قبل از استفاده از کد ارائه شده در برنامه ها ، برای درک همه جنبه های کد ، از جمله مکان دایرکتوری ، وقت بگذارید. به عنوان مثال ، اطمینان حاصل کنید که برنامه ها اجازه خواندن پرونده ها در فهرست را دارند.