فرض کنید که روی یک برنامه کاربردی در سطح سازمانی کار می کنید و تعداد زیادی API را در معرض دید مشتریان مختلف قرار می دهید. اکنون، از API، مقداری پیام سفارشی را برمیگردانید و پس از استقرار، باید آن پیام سفارشی را تغییر دهید. اگر آن را از پیکربندی بارگیری نکردید، باید کد را تغییر دهید و پروژه خود را مجدداً مستقر کنید.
بنابراین، به عنوان بخشی از راه حل، ما پیام ها را از فایل کانفیگ دریافت می کنیم و پیکربندی را به گونه ای بارگذاری می کنیم که هر زمان که آن را تغییر دادید، به طور خودکار بارگذاری مجدد شود. بیایید اجرای گام به گام همان را ببینیم.
ویژوال استودیو را باز کنید و یک پروژه جدید ایجاد کنید. API را به عنوان الگو انتخاب کنید و روی دکمه OK کلیک کنید.
![دریافت پیام پاسخ از فایل پیکربندی در NET Core Web API](http://pezhvak24.ir/dl/10kcor/cscd/article/get-response-message-from-config-file-in-net-core-web-api/Images/Get Response Message From Config File In .NET Core Web API.png)
یک مدل برای پیام پاسخ API ایجاد کنید که دارای "Code" و "Message" به عنوان ویژگی است.
- namespace ResponseMessageFromConfig
- {
- public class ApiResponse
- {
- public int Code { get; set; }
- public string Message { get; set; }
- }
- }
یک فایل answermessage.json ایجاد کنید که در آن همه پیامهای ممکن را که میخواهیم به عنوان پاسخ API برگردانیم نگهداری کنیم.
answermessage.json
- {
- "ResponseMessage": {
- "Values": {
- "Success": "Successful!",
- "NoData": "No Record Found!"
- }
- }
- }
کلاسی ایجاد کنید که با پیکربندی ما مطابقت داشته باشد. از آنجایی که ممکن است n تعداد جفت کلید-مقدار در پیکربندی خود داشته باشیم، از Dictionary استفاده می کنیم تا همان را ذخیره کند.
- using System.Collections.Generic;
- namespace ResponseMessageFromConfig
- {
- public class ResponseMessage
- {
- public Dictionary<string, string> Values
- {
- get;
- set;
- }
- }
- }
یک enum پیام ایجاد کنید که برای ارسال به عنوان کلید و دریافت پیام از پیکربندی استفاده می شود.
- namespace ResponseMessageFromConfig
- {
- public class Constant
- {
- }
- public enum Message
- {
- Success = 200,
- NoData = 204
- }
- }
فایل JSON را در سازنده کلاس startup اضافه کنید و مطمئن شوید که مقدار "optional" باید false باشد و reloadOnChange باید درست باشد. این بدان معنی است که هر زمان پیکربندی خود را تغییر دهید، پیکربندی شما مجدداً بارگیری می شود.
کلاس ResponseMessage را در مجموعه سرویس اضافه کنید تا هر زمان که به آن نیاز داشتیم تزریق شود. همچنین، داده ها را از پیکربندی دریافت کنید و آن را با دیکشنری کلاس متصل کنید.
- using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.DependencyInjection;
- namespace ResponseMessageFromConfig
- {
- public class Startup
- {
- public Startup(IConfiguration configuration, IHostingEnvironment env)
- {
- var builder = new ConfigurationBuilder()
- .SetBasePath(env.ContentRootPath)
- .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
- .AddJsonFile($"Config/responsemessage.json", optional: false, reloadOnChange: true)
- .AddEnvironmentVariables();
- configuration = builder.Build();
- Configuration = configuration;
- }
- public IConfiguration Configuration { get; }
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddSingleton(Configuration.GetSection("ResponseMessage").Get<ResponseMessage>());
- services.Configure<ResponseMessage>((setting) =>
- {
- Configuration.GetSection("ResponseMessage").Bind(setting);
- });
- services.AddMvc();
- }
- public void Configure(IApplicationBuilder app, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- }
- app.UseMvc();
- }
- }
- }
ResponseMessage را از طریق سازنده در ValuesController تزریق کنید. در اینجا، ما از IOptionsSnapshot استفاده می کنیم که برای دسترسی به مقدار ResponseMessage ما در طول عمر یک درخواست استفاده می شود.
در متد GET، با وارد کردن مقدار enum به عنوان پارامتر، پیام را از نمونه ResponseMessage دریافت کنید.
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Extensions.Options;
- using System.Collections.Generic;
- namespace ResponseMessageFromConfig.Controllers
- {
- [Route("api/[controller]")]
- public class ValuesController : Controller
- {
- private readonly ResponseMessage responseMessage;
- public ValuesController(IOptionsSnapshot<ResponseMessage> responseMessage)
- {
- this.responseMessage = responseMessage.Value;
- }
- // GET api/values
- [HttpGet]
- public IEnumerable<string> Get()
- {
- ApiResponse apiResponse = new ApiResponse();
- apiResponse.Code = (int)Message.Success;
- apiResponse.Message = responseMessage.Values[Message.Success.ToString()];
- return new string[] { apiResponse.Code.ToString(), apiResponse.Message };
- }
- // GET api/values/5
- [HttpGet("{id}")]
- public string Get(int id)
- {
- return "value";
- }
- // POST api/values
- [HttpPost]
- public void Post([FromBody]string value)
- {
- }
- // PUT api/values/5
- [HttpPut("{id}")]
- public void Put(int id, [FromBody]string value)
- {
- }
- // DELETE api/values/5
- [HttpDelete("{id}")]
- public void Delete(int id)
- {
- }
- }
- }
برنامه را اجرا کنید و می توانید یک پیام پاسخ به عنوان "موفقیت!"
![دریافت پیام پاسخ از فایل پیکربندی در NET Core Web API](http://pezhvak24.ir/dl/10kcor/cscd/article/get-response-message-from-config-file-in-net-core-web-api/Images/Get Response Message From Config File In .NET Core Web API1.jpg)
اکنون، برای آزمایش ویژگی reloadOnChange، اجازه دهید پیام خود را از "موفقیت" تغییر دهیم. به "موفق". تعجب (!) را حذف کردیم و نقطه (.) را اضافه کردیم.
![دریافت پیام پاسخ از فایل پیکربندی در NET Core Web API](http://pezhvak24.ir/dl/10kcor/cscd/article/get-response-message-from-config-file-in-net-core-web-api/Images/Get Response Message From Config File In .NET Core Web API2.png)
مرورگر را بازخوانی کنید و می توانید پیام "موفقیت" را ببینید. یعنی به روز شده. بنابراین در اینجا، ما مجدداً کامپایل یا مستقر نشدهایم، اما همچنان، پیام بهروز شده تغییر فایل پیکربندی را دریافت میکنیم.
![دریافت پیام پاسخ از فایل پیکربندی در NET Core Web API](http://pezhvak24.ir/dl/10kcor/cscd/article/get-response-message-from-config-file-in-net-core-web-api/Images/Get Response Message From Config File In .NET Core Web API3.jpg)
نمونه را می توانید از اینجا دانلود کنید .