.NET CLI ব্যবহার করে প্রাথমিক প্রজেক্ট সেটআপ থেকে মিডলওয়্যার, কন্ট্রোলার এবং পরিষেবাগুলি কনফিগার করার জন্য, একটি শক্তিশালী API তৈরি করার প্রতিটি পদক্ষেপ শিখুন। স্কেলযোগ্য, দক্ষ ওয়েব অ্যাপ্লিকেশন তৈরি করতে নির্ভরতা ইনজেকশন, অ্যাসিঙ্ক্রোনাস অ্যাকশন এবং ব্যতিক্রমগুলি পরিচালনা করার জন্য সেরা অনুশীলনগুলি আবিষ্কার করুন।
একটি নতুন ওয়েব API প্রকল্প তৈরি করতে .NET CLI ব্যবহার করুন৷ এটি স্টার্টআপের জন্য Program.cs এবং উদাহরণ হিসাবে একটি WeatherForecast কন্ট্রোলার সহ একটি মৌলিক প্রকল্প কাঠামো সেট আপ করে।
dotnet new webapi -n MyWebApi
.NET 8 ন্যূনতম APIগুলির দিকে প্রবণতা অব্যাহত রাখে, আপনাকে সরাসরি Program.cs ফাইলে একটি সরলীকৃত এবং সংক্ষিপ্ত পদ্ধতিতে পরিষেবা এবং শেষ পয়েন্টগুলি কনফিগার করার অনুমতি দেয়৷
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "Hello, World!"); app.Run();
কন্ট্রোলাররা ইনকামিং HTTP অনুরোধগুলি পরিচালনা করে এবং ক্লায়েন্টকে সাড়া দেয়। এগুলি কন্ট্রোলারবেস থেকে উত্তরাধিকার সূত্রে এবং [ApiController] এর সাথে টীকা দিয়ে সংজ্ঞায়িত করা হয়।
[ApiController] [Route("[controller]")] public class MyController : ControllerBase { [HttpGet] public IActionResult Get() => Ok("Hello from MyController"); }
.NET কোরের অন্তর্নির্মিত নির্ভরতা ইনজেকশন (DI) নির্ভরতা পরিচালনা করা সহজ করে তোলে। আপনি তাদের কনস্ট্রাক্টরের মাধ্যমে আপনার কন্ট্রোলারগুলিতে পরিষেবাগুলি ইনজেকশন করতে পারেন।
public class MyService { public string GetMessage() => "Injected message"; } public class MyController : ControllerBase { private readonly MyService _myService; public MyController(MyService myService) { _myService = myService; } [HttpGet] public IActionResult Get() => Ok(_myService.GetMessage()); }
পরিষেবাগুলি (যেমন ডাটাবেস প্রসঙ্গ, কাস্টম পরিষেবা, ইত্যাদি) Program.cs ফাইলে কনফিগার করা হয়, যা আপনার অ্যাপ্লিকেশন জুড়ে নির্ভরতা ইনজেকশনের জন্য উপলব্ধ করে৷
builder.Services.AddScoped<MyService>();
.NET পরিবেশ-নির্দিষ্ট কনফিগারেশন ফাইল সমর্থন করে (appsettings.json, appsettings.Development.json, ইত্যাদি), অ্যাপ্লিকেশনের পরিবেশের উপর ভিত্তি করে বিভিন্ন সেটিংসের অনুমতি দেয়।
// appsettings.Development.json { "Logging": { "LogLevel": { "Default": "Debug" } } }
মিডলওয়্যার উপাদানগুলি একটি পাইপলাইন গঠন করে যা অনুরোধ এবং প্রতিক্রিয়াগুলি পরিচালনা করে। কাস্টম মিডলওয়্যার লগিং বা ত্রুটি পরিচালনার মতো ক্রস-কাটিং উদ্বেগের জন্য তৈরি করা যেতে পারে।
app.Use(async (context, next) => { // Custom logic before passing to the next middleware await next(); // Custom logic after executing the next middleware });
.NET ওয়েব API-এ রাউটিং কন্ট্রোলার এবং অ্যাকশন পদ্ধতিতে অ্যাট্রিবিউট রাউটিং এর মাধ্যমে অর্জন করা হয়। এটি ইউআরএলগুলিকে সরাসরি কন্ট্রোলার অ্যাকশনে ম্যাপ করার অনুমতি দেয়।
[HttpGet("myaction/{id}")] public IActionResult GetAction(int id) => Ok($"Action with ID = {id}");
মডেল বাইন্ডিং স্বয়ংক্রিয়ভাবে HTTP অনুরোধ থেকে অ্যাকশন মেথড প্যারামিটারে ডেটা ম্যাপ করে। এটি JSON বডি এবং কোয়েরি স্ট্রিং প্যারামিটার সহ জটিল প্রকারগুলিকে সমর্থন করে৷
public class MyModel { public int Id { get; set; } public string Name { get; set; } } [HttpPost] public IActionResult PostAction([FromBody] MyModel model) => Ok(model);
মডেল ডেটা যাচাই করতে ডেটা টীকা ব্যবহার করা যেতে পারে। [ApiController] অ্যাট্রিবিউট স্বয়ংক্রিয়ভাবে বৈধতা প্রয়োগ করে, মডেলটি অবৈধ হলে 400 দিয়ে সাড়া দেয়।
public class MyModel { [Required] public int Id { get; set; } [StringLength(100)] public string Name { get; set; } }
অ্যাসিঙ্ক্রোনাস অ্যাকশনগুলি I/O ক্রিয়াকলাপ সম্পূর্ণ হওয়ার জন্য অপেক্ষা করার সময় থ্রেডগুলি মুক্ত করে স্কেলেবিলিটি উন্নত করে। অ্যাসিঙ্ক কীওয়ার্ড ব্যবহার করুন এবং টাস্ক বা টাস্ক<IActionResult> ফেরত দিন।
[HttpGet("{id}")] public async Task<IActionResult> GetAsync(int id) { var result = await _service.GetByIdAsync(id); return Ok(result); }
গ্লোবাল এক্সেপশন হ্যান্ডলিং কেন্দ্রীভূত ত্রুটি প্রক্রিয়াকরণ, লগিং, এবং আন-হ্যান্ডেল করা ব্যতিক্রমগুলিতে প্রমিত API প্রতিক্রিয়াগুলির জন্য অনুমতি দেয়।
app.UseExceptionHandler(a => a.Run(async context => { var exceptionHandlerPathFeature = context.Features.Get<IExceptionHandlerPathFeature>(); var exception = exceptionHandlerPathFeature.Error; // Log the exception, generate a custom response, etc. context.Response.StatusCode = 500; await context.Response.WriteAsJsonAsync(new { Error = "An unexpected error occurred" }); }));
API সংস্করণ সময়ের সাথে API-এ পরিবর্তনগুলি পরিচালনা করতে সহায়তা করে। .NET প্ল্যাটফর্ম কোয়েরি স্ট্রিং, URL পাথ, বা অনুরোধ শিরোনামের মাধ্যমে সংস্করণ সমর্থন করে।
builder.Services.AddApiVersioning(options => { options.AssumeDefaultVersionWhenUnspecified = true; options.DefaultApiVersion = new ApiVersion(1, 0); options.ReportApiVersions = true; });
বিষয়বস্তু নেগোসিয়েশন একটি এপিআইকে অনুরোধে অ্যাকসেপ্ট হেডারের উপর ভিত্তি করে প্রতিক্রিয়ার বিভিন্ন ফর্ম্যাট পরিবেশন করতে দেয়, যা JSON, XML ইত্যাদির মতো ফর্ম্যাটগুলির জন্য সমর্থন সক্ষম করে৷
builder.Services.AddControllers() .AddXmlDataContractSerializerFormatters();
JSON সিরিয়ালাইজার সেটিংস কনফিগার করে JSON প্রতিক্রিয়া বিন্যাস কাস্টমাইজ করুন, যেমন CamelCase নামকরণ বা নাল মান উপেক্ষা করা।
builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; options.JsonSerializerOptions.IgnoreNullValues = true; });
ক্রস-অরিজিন রিসোর্স শেয়ারিং (CORS) আপনার API-কে বিভিন্ন ডোমেনে হোস্ট করা ওয়েব অ্যাপ্লিকেশন থেকে কল করার অনুমতি দেয়। আপনার প্রয়োজনীয়তা অনুযায়ী CORS নীতি কনফিগার করুন।
builder.Services.AddCors(options => { options.AddPolicy("AllowSpecificOrigin", builder => builder.WithOrigins("http://example.com")); }); app.UseCors("AllowSpecificOrigin");
প্রমাণীকরণ সক্ষম করে আপনার API সুরক্ষিত করুন, যা ব্যবহারকারী বা পরিষেবার অনুরোধের পরিচয় যাচাই করে।
builder.Services.AddAuthentication("Bearer") .AddJwtBearer(options => { options.Authority = "https://your-auth-server"; options.Audience = "your-api"; });
প্রমাণীকরণের পরে, অনুমোদন নির্ধারণ করে যে একজন প্রমাণীকৃত ব্যবহারকারীর একটি ক্রিয়া সম্পাদন করার বা একটি সংস্থান অ্যাক্সেস করার অনুমতি আছে কিনা।
[Authorize] public class SecureController : ControllerBase { // Action methods here }
Swagger (OpenAPI) আপনার API এর জন্য ইন্টারেক্টিভ ডকুমেন্টেশন প্রদান করে, যা ডেভেলপারদের সহজেই বুঝতে এবং ব্যবহার করতে দেয়।
builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); app.UseSwagger(); app.UseSwaggerUI();
.NET কোর একটি অন্তর্নির্মিত লগিং ফ্রেমওয়ার্ক প্রদান করে যা বিভিন্ন আউটপুটে (কনসোল, ডিবাগ উইন্ডো, বাহ্যিক পরিষেবা, ইত্যাদি) বার্তাগুলি লগ করতে পারে।
logger.LogInformation("This is an informational message"); app.Use(async (context, next) => { logger.LogError("This is an error message before the next middleware"); await next.Invoke(); // Log after calling the next middleware });
এনটিটি ফ্রেমওয়ার্ক কোর হল একটি ORM যা .NET অ্যাপ্লিকেশনগুলিতে ডেটা অ্যাক্সেসের জন্য ব্যবহৃত হয়। এটি আপনাকে জোরালোভাবে টাইপ করা অবজেক্ট ব্যবহার করে ডেটা অনুসন্ধান এবং ম্যানিপুলেট করার অনুমতি দেয়।
public class MyDbContext : DbContext { public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) {} public DbSet<MyModel> MyModels { get; set; } }
মাইগ্রেশন আপনাকে আপনার ডেটা মডেলের পরিবর্তনগুলি ট্র্যাক করে আপনার ডাটাবেস স্কিমাতে সংস্করণ নিয়ন্ত্রণ প্রয়োগ করার অনুমতি দেয়।
dotnet ef migrations add InitialCreate dotnet ef database update
রিপোজিটরি প্যাটার্ন ডেটা স্তরকে বিমূর্ত করে, আপনার অ্যাপ্লিকেশনটিকে আরও মডুলার এবং বজায় রাখা সহজ করে তোলে।
public interface IRepository<T> { Task<IEnumerable<T>> GetAllAsync(); Task<T> GetByIdAsync(int id); // Other methods... } public class MyRepository<T> : IRepository<T> where T : class { private readonly MyDbContext _context; public MyRepository(MyDbContext context) { _context = context; } // Implement methods... }
ইউনিট টেস্টিং বিচ্ছিন্নভাবে কোডের পৃথক ইউনিট পরীক্ষা করে আপনার ওয়েব API ফাংশন সঠিকভাবে নিশ্চিত করে।
public class MyControllerTests { [Fact] public async Task Get_ReturnsExpectedValue() { // Arrange var serviceMock = new Mock<IMyService>(); serviceMock.Setup(service => service.GetAsync()).ReturnsAsync("test"); var controller = new MyController(serviceMock.Object); // Act var result = await controller.Get(); // Assert Assert.Equal("test", result.Value); } }
.NET ওয়েব API ফ্রন্ট-এন্ড অ্যাপ্লিকেশনের জন্য ব্যাকএন্ড হিসাবে কাজ করতে পারে, আরামদায়ক পরিষেবা প্রদান করে।
fetch('https://localhost:5001/mycontroller') .then(response => response.json()) .then(data => console.log(data));
স্বাস্থ্য পরীক্ষাগুলি আপনার অ্যাপ্লিকেশনের স্থিতি এবং এর নির্ভরতা নিরীক্ষণ করার একটি উপায় প্রদান করে, যা মাইক্রোসার্ভিসেস আর্কিটেকচারের জন্য দরকারী।
builder.Services.AddHealthChecks(); app.MapHealthChecks("/health");
SignalR রিয়েল-টাইম ওয়েব কার্যকারিতা সক্ষম করে, সার্ভার-সাইড কোডকে ক্লায়েন্ট-সাইড ওয়েব অ্যাপ্লিকেশনগুলিতে অ্যাসিঙ্ক্রোনাস বিজ্ঞপ্তি পাঠানোর অনুমতি দেয়।
public class MyHub : Hub { public async Task SendMessage(string user, string message) { await Clients.All.SendAsync("ReceiveMessage", user, message); } }
প্রতিক্রিয়া ক্যাশিং পূর্বে অনুরোধ করা সংস্থানগুলির একটি অনুলিপি সংরক্ষণ করে একটি সার্ভারকে পরিচালনা করতে হবে এমন অনুরোধের সংখ্যা হ্রাস করে৷
[HttpGet("{id}")] [ResponseCache(Duration = 60)] public IActionResult GetById(int id) { // Retrieve and return your resource }
স্ট্যাটিক ফাইল (HTML, CSS, JavaScript, ইত্যাদি) পরিবেশন করা একটি .NET ওয়েব API এর সাথে ফ্রন্ট-এন্ড অ্যাপ্লিকেশনগুলিকে ব্যাক করার জন্য অপরিহার্য।
app.UseStaticFiles(); // Enable static file serving
অপশন প্যাটার্নটি সম্পর্কিত সেটিংসের গোষ্ঠীগুলিকে উপস্থাপন করতে ক্লাস ব্যবহার করে। IOptions<T> ব্যবহার করে, আপনি আপনার অ্যাপ্লিকেশনের যেকোনো জায়গায় এই সেটিংস অ্যাক্সেস করতে পারেন।
public class MySettings { public string Setting1 { get; set; } // Other settings } builder.Services.Configure<MySettings>(builder.Configuration.GetSection("MySettings")); public class MyService { private readonly MySettings _settings; public MyService(IOptions<MySettings> settings) { _settings = settings.Value; } // Use _settings.Setting1 }
মিডলওয়্যার হল এমন সফ্টওয়্যার যা অনুরোধ এবং প্রতিক্রিয়াগুলি পরিচালনা করার জন্য একটি অ্যাপ্লিকেশন পাইপলাইনে একত্রিত হয়। নির্দিষ্ট কাজ সম্পাদন করার জন্য কাস্টম মিডলওয়্যার তৈরি করা যেতে পারে।
public class MyCustomMiddleware { private readonly RequestDelegate _next; public MyCustomMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext httpContext) { // Pre-processing logic here await _next(httpContext); // Call the next middleware in the pipeline // Post-processing logic here } } // Extension method for easy middleware registration public static class MyCustomMiddlewareExtensions { public static IApplicationBuilder UseMyCustomMiddleware(this IApplicationBuilder builder) { return builder.UseMiddleware<MyCustomMiddleware>(); } }
রেট সীমিতকরণ আপনার APIকে একটি নির্দিষ্ট সময়সীমার মধ্যে কত ঘন ঘন অনুরোধ করতে পারে তা সীমিত করে অতিরিক্ত ব্যবহার থেকে রক্ষা করে।
// Assume using a third-party library like AspNetCoreRateLimit builder.Services.AddInMemoryRateLimiting(); builder.Services.Configure<IpRateLimitOptions>(options => { options.GeneralRules = new List<RateLimitRule> { new RateLimitRule { Endpoint = "*", Limit = 100, Period = "1h" } }; });
API কলগুলি প্রমাণীকরণ এবং অনুমোদন করার একটি সহজ উপায় হল API কী। এগুলি ক্লায়েন্ট থেকে সার্ভারে হয় কোয়েরি স্ট্রিং বা হেডারে প্রেরণ করা হয়।
public class ApiKeyMiddleware { private readonly RequestDelegate _next; private const string APIKEYNAME = "x-api-key"; public ApiKeyMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { if (!context.Request.Headers.TryGetValue(APIKEYNAME, out var extractedApiKey)) { context.Response.StatusCode = 401; await context.Response.WriteAsync("API Key was not provided."); return; } // Validate the extracted API Key here... await _next(context); } }
আউটপুট ক্যাশিং আপনাকে অনুরোধের প্রতিক্রিয়া সংরক্ষণ করতে দেয়। পরবর্তী অনুরোধগুলি ক্যাশে থেকে পরিবেশন করা যেতে পারে, উল্লেখযোগ্যভাবে কর্মক্ষমতা উন্নত করে।
[HttpGet] [ResponseCache(Duration = 120, Location = ResponseCacheLocation.Client, NoStore = false)] public IActionResult Get() { // Your logic here }
ব্যাকগ্রাউন্ড টাস্কগুলি ব্যাকগ্রাউন্ডে চালানোর জন্য ক্রিয়াকলাপগুলিকে সক্ষম করে, ব্যবহারকারীর অনুরোধ থেকে স্বাধীন, যেমন ইমেল পাঠানো বা দীর্ঘ-চলমান কাজগুলি প্রক্রিয়া করা।
public class MyBackgroundService : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { // Your background task logic here await Task.Delay(TimeSpan.FromHours(1), stoppingToken); } } }
WebSockets একটি একক, দীর্ঘস্থায়ী সংযোগের মাধ্যমে একটি পূর্ণ-দ্বৈত যোগাযোগের চ্যানেল প্রদান করে, যা রিয়েল-টাইম অ্যাপ্লিকেশনের জন্য আদর্শ।
app.UseWebSockets(); app.Use(async (context, next) => { if (context.WebSockets.IsWebSocketRequest) { WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync(); // Handle the WebSocket request here } else { await next(); } });
অনুরোধ স্থানীয়করণ অনুরোধের তথ্যের উপর ভিত্তি করে বিভিন্ন সংস্কৃতি এবং ভাষার জন্য বিষয়বস্তু স্থানীয়করণের একটি উপায় প্রদান করে।
var supportedCultures = new[] { "en-US", "fr-FR" }; var localizationOptions = new RequestLocalizationOptions() .SetDefaultCulture(supportedCultures[0]) .AddSupportedCultures(supportedCultures) .AddSupportedUICultures(supportedCultures); app.UseRequestLocalization(localizationOptions);
GraphQL হল API-এর জন্য একটি ক্যোয়ারী ভাষা। GraphQL এর সাথে একটি .NET ওয়েব API একত্রিত করা আরও দক্ষ ডেটা পুনরুদ্ধারের অনুমতি দেয়।
// Assume using a library like HotChocolate builder.Services .AddGraphQLServer() .AddQueryType<Query>(); app.MapGraphQL();
মনিটরিং এবং টেলিমেট্রিতে আপনার অ্যাপ্লিকেশনের কর্মক্ষমতা এবং ব্যবহার সম্পর্কে ডেটা সংগ্রহ, বিশ্লেষণ এবং কাজ করা জড়িত।
// Assume using Application Insights builder.Services.AddApplicationInsightsTelemetry("YOUR_INSTRUMENTATION_KEY");
SignalR হল একটি লাইব্রেরি যা অ্যাপগুলিতে রিয়েল-টাইম ওয়েব কার্যকারিতা যোগ করা সহজ করে। রিয়েল-টাইম ওয়েব কার্যকারিতা হল সার্ভার কোড পুশ কন্টেন্ট কানেক্টেড ক্লায়েন্টদের কাছে তাৎক্ষণিকভাবে পাওয়ার ক্ষমতা, যেমনটা ঘটবে, সার্ভারকে ক্লায়েন্টকে নতুন ডেটার অনুরোধ করার জন্য অপেক্ষা করতে হবে না। SignalR চ্যাট অ্যাপ্লিকেশন, রিয়েল-টাইম ড্যাশবোর্ড এবং আরও ইন্টারেক্টিভ ওয়েব অ্যাপ্লিকেশন বিকাশের জন্য উপযুক্ত।
public class ChatHub : Hub { public async Task SendMessage(string user, string message) { // Call the broadcastMessage method to update clients. await Clients.All.SendAsync("broadcastMessage", user, message); } } // Startup or Program.cs app.MapHub<ChatHub>("/chathub");
Program.cs-এ ইন্টিগ্রেশন:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // Other configurations... app.UseEndpoints(endpoints => { endpoints.MapHub<ChatHub>("/chathub"); }); }
এন্টিটি ফ্রেমওয়ার্ক কোর সত্তার মধ্যে জটিল সম্পর্কের ম্যাপিংয়ের অনুমতি দেয়, যেমন এক-থেকে-এক, এক-থেকে-অনেক এবং বহু-থেকে-অনেক।
public class Author { public int AuthorId { get; set; } public string Name { get; set; } public ICollection<Book> Books { get; set; } } public class Book { public int BookId { get; set; } public string Title { get; set; } public int AuthorId { get; set; } public Author Author { get; set; } }
কাস্টম বৈধতা বৈশিষ্ট্যগুলি আপনাকে অন্তর্নির্মিত বৈধতা বৈশিষ্ট্যগুলিকে প্রসারিত করে ডেটা মডেলগুলির জন্য আপনার বৈধতা যুক্তি সংজ্ঞায়িত করতে দেয়৷
public class MyCustomValidationAttribute : ValidationAttribute { protected override ValidationResult IsValid(object value, ValidationContext validationContext) { // Your custom validation logic here if (value is int intValue && intValue > 0) { return ValidationResult.Success; } return new ValidationResult("Value must be positive"); } } public class MyModel { [MyCustomValidationAttribute] public int MyProperty { get; set; } }
.NET-এর বিকল্প প্যাটার্ন জটিল কনফিগারেশন পরিস্থিতি সমর্থন করে, যার মধ্যে নেস্টেড অবজেক্ট, তালিকা এবং বৈধতা রয়েছে।
public class MyOptions { public MyNestedOptions Nested { get; set; } public List<string> Items { get; set; } } public class MyNestedOptions { public string Key { get; set; } } // In Program.cs or Startup.cs builder.Services.Configure<MyOptions>(builder.Configuration.GetSection("MyOptions"));
একটি অ্যাপ্লিকেশন পর্যবেক্ষণ এবং প্রোফাইলিং কর্মক্ষমতা অপ্টিমাইজ করার জন্য অপরিহার্য, বাধা এবং অদক্ষতা সনাক্ত করতে পারে।
app.UseMiniProfiler();
আপনার এপিআই ডকুমেন্টেশন উন্নত করুন XML মন্তব্যগুলিকে আপনার Swagger UI-তে সংহত করে, আপনার API ব্যবহারকারী বিকাশকারীদের জন্য একটি সমৃদ্ধ অভিজ্ঞতা প্রদান করে৷
builder.Services.AddSwaggerGen(c => { var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); c.IncludeXmlComments(xmlPath); });
বিশ্বায়ন এবং স্থানীয়করণ আপনার অ্যাপ্লিকেশনটিকে একাধিক ভাষা এবং সংস্কৃতিকে সমর্থন করার অনুমতি দেয়, এটি বিশ্বব্যাপী দর্শকদের কাছে অ্যাক্সেসযোগ্য করে তোলে।
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources"); app.UseRequestLocalization(app.Services.GetRequiredService<IOptions<RequestLocalizationOptions>>().Value);
বিভিন্ন HTTP শিরোনাম যোগ করে আপনার ওয়েব অ্যাপ্লিকেশনের নিরাপত্তা উন্নত করা সাধারণ আক্রমণ এবং দুর্বলতা থেকে রক্ষা করতে পারে।
app.UseHsts(); app.UseXContentTypeOptions(); app.UseReferrerPolicy(opts => opts.NoReferrer()); app.UseXXssProtection(options => options.EnabledWithBlockMode()); app.UseXfo(options => options.Deny());
বৈশিষ্ট্য ফ্ল্যাগগুলি আপনাকে নতুন কোড স্থাপন না করে আপনার অ্যাপ্লিকেশনের বৈশিষ্ট্যগুলিকে চালু এবং বন্ধ করার অনুমতি দেয়, সহজতর পরীক্ষা এবং রোলআউটগুলি সহজতর করে৷
// Using a library like Microsoft.FeatureManagement builder.Services.AddFeatureManagement();
ব্লেজার আপনাকে জাভাস্ক্রিপ্টের পরিবর্তে C# ব্যবহার করে ইন্টারেক্টিভ ওয়েব UI তৈরি করতে দেয়। ওয়েব API-এর সাথে ব্লেজারকে একীভূত করা একটি বিরামবিহীন ফুল-স্ট্যাক বিকাশের অভিজ্ঞতা প্রদান করে।
// In a Blazor Server app @code { private IEnumerable<WeatherForecast> forecasts; protected override async Task OnInitializedAsync() { forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast"); } }
প্রতিক্রিয়া সংকোচন আপনার API প্রতিক্রিয়াগুলির আকার হ্রাস করতে পারে, ধীর নেটওয়ার্কে ক্লায়েন্টদের জন্য লোডের সময় উন্নত করে।
builder.Services.AddResponseCompression(options => { options.Providers.Add<GzipCompressionProvider>(); options.EnableForHttps = true; }); app.UseResponseCompression();
C# সম্প্রদায়ের অংশ হওয়ার জন্য আপনাকে ধন্যবাদ! তুমি ত্যাগ করার পূর্বে:
আমাদের অনুসরণ করুন: এক্স | লিঙ্কডইন | Dev.to | হ্যাশনোড | নিউজলেটার | টাম্বলার
আমাদের অন্যান্য প্ল্যাটফর্মগুলি দেখুন: GitHub | ইনস্টাগ্রাম | টিকটক | Quora | দৈনিক.দেব
এছাড়াও এখানে প্রকাশিত