paint-brush
.NET 8 Web API'sinde Uzmanlaşma: Kurulumdan Güvenliğe - En İyi 50 İpucuile@ssukhpinder
871 okumalar
871 okumalar

.NET 8 Web API'sinde Uzmanlaşma: Kurulumdan Güvenliğe - En İyi 50 İpucu

ile Sukhpinder Singh22m2024/04/03
Read on Terminal Reader

Çok uzun; Okumak

.NET CLI kullanarak ilk proje kurulumundan ara yazılımları, denetleyicileri ve hizmetleri yapılandırmaya kadar sağlam bir API oluşturmaya yönelik her adımı öğrenin. Ölçeklenebilir, verimli web uygulamaları oluşturmak için bağımlılık ekleme, eşzamansız eylemler ve istisnaları işlemeye yönelik en iyi uygulamaları keşfedin.
featured image - .NET 8 Web API'sinde Uzmanlaşma: Kurulumdan Güvenliğe - En İyi 50 İpucu
Sukhpinder Singh HackerNoon profile picture
0-item
1-item
2-item
3-item
4-item

.NET CLI kullanarak ilk proje kurulumundan ara yazılımları, denetleyicileri ve hizmetleri yapılandırmaya kadar sağlam bir API oluşturmaya yönelik her adımı öğrenin. Ölçeklenebilir, verimli web uygulamaları oluşturmak için bağımlılık ekleme, eşzamansız eylemler ve istisnaları işlemeye yönelik en iyi uygulamaları keşfedin.

1. .NET 8 Web API Projesi Kurma

Konsept

Yeni bir Web API projesi oluşturmak için .NET CLI'yi kullanın. Bu, başlatma için Program.cs'yi ve örnek olarak bir WeatherForecast denetleyicisini içeren temel bir proje yapısı oluşturur.

Kod Örneği

 dotnet new webapi -n MyWebApi

2. Program.cs — Minimum API Yapılandırması

Konsept

.NET 8, hizmetleri ve uç noktaları doğrudan Program.cs dosyasında basitleştirilmiş ve kısa bir şekilde yapılandırmanıza olanak tanıyarak minimal API'lere yönelik eğilimi sürdürüyor.

Kod Örneği

 var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "Hello, World!"); app.Run();

3. Denetleyicinin Tanımlanması

Konsept

Denetleyiciler gelen HTTP isteklerini yönetir ve istemciye yanıt verir. ControllerBase'den miras alınarak ve [ApiController] ile açıklama eklenerek tanımlanırlar.

Kod Örneği

 [ApiController] [Route("[controller]")] public class MyController : ControllerBase { [HttpGet] public IActionResult Get() => Ok("Hello from MyController"); }

4. Denetleyicilere Bağımlılık Enjeksiyonu

Konsept

.NET Core'un yerleşik bağımlılık eklemesi (DI), bağımlılıkları yönetmeyi kolaylaştırır. Hizmetleri denetleyicilerinize yapıcıları aracılığıyla enjekte edebilirsiniz.

Kod Örneği

 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()); }

5. Hizmetleri Yapılandırma

Konsept

Hizmetler (veritabanı bağlamları, özel hizmetler vb. gibi) Program.cs dosyasında yapılandırılarak uygulamanızın tamamında bağımlılık ekleme için kullanılabilir hale getirilir.

Kod Örneği

 builder.Services.AddScoped<MyService>();

6. Ortama Dayalı Yapılandırma

Konsept

.NET, uygulamanın ortamına bağlı olarak farklı ayarlara izin vererek ortama özgü yapılandırma dosyalarını (appsettings.json, appsettings.Development.json vb.) destekler.

Kod Örneği

 // appsettings.Development.json { "Logging": { "LogLevel": { "Default": "Debug" } } }

7. Ara yazılım

Konsept

Ara yazılım bileşenleri, istekleri ve yanıtları işleyen bir işlem hattı oluşturur. Günlüğe kaydetme veya hata işleme gibi kesişen konular için özel ara yazılım oluşturulabilir.

Kod Örneği

 app.Use(async (context, next) => { // Custom logic before passing to the next middleware await next(); // Custom logic after executing the next middleware });

8. Yönlendirme

Konsept

.NET Web API'sinde yönlendirme, denetleyiciler ve eylem yöntemleri üzerindeki öznitelik yönlendirme yoluyla gerçekleştirilir. Bu, URL'lerin doğrudan denetleyici eylemleriyle eşleştirilmesine olanak tanır.

Kod Örneği

 [HttpGet("myaction/{id}")] public IActionResult GetAction(int id) => Ok($"Action with ID = {id}");

9. Model Bağlama

Konsept

Model bağlama, HTTP isteklerinden gelen verileri eylem yöntemi parametrelerine otomatik olarak eşler. JSON gövdeleri ve sorgu dizesi parametreleri dahil olmak üzere karmaşık türleri destekler.

Kod Örneği

 public class MyModel { public int Id { get; set; } public string Name { get; set; } } [HttpPost] public IActionResult PostAction([FromBody] MyModel model) => Ok(model);

10. Veri Doğrulaması

Konsept

Model verilerini doğrulamak için veri açıklamaları kullanılabilir. [ApiController] özelliği doğrulamayı otomatik olarak zorlar ve model geçersizse 400 ile yanıt verir.

Kod Örneği

 public class MyModel { [Required] public int Id { get; set; } [StringLength(100)] public string Name { get; set; } }

11. Eşzamansız Eylemler

Konsept

Eşzamansız eylemler, G/Ç işlemlerinin tamamlanmasını beklerken iş parçacıklarını serbest bırakarak ölçeklenebilirliği artırır. Async anahtar sözcüğünü kullanın ve Görev veya Görev<IActionResult> değerini döndürün.

Kod Örneği

 [HttpGet("{id}")] public async Task<IActionResult> GetAsync(int id) { var result = await _service.GetByIdAsync(id); return Ok(result); }

12. İstisnaları Küresel Olarak Ele Alma

Konsept

Genel istisna işleme, merkezi hata işlemeye, günlüğe kaydetmeye ve işlenmeyen istisnalar üzerinde standartlaştırılmış API yanıtlarına olanak tanır.

Kod Örneği

 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" }); }));

13. API Sürümü Oluşturma

Konsept

API sürüm oluşturma, zaman içinde API'de yapılan değişikliklerin yönetilmesine yardımcı olur. .NET platformu, sorgu dizesi, URL yolu veya istek başlığı aracılığıyla sürüm oluşturmayı destekler.

Kod Örneği

 builder.Services.AddApiVersioning(options => { options.AssumeDefaultVersionWhenUnspecified = true; options.DefaultApiVersion = new ApiVersion(1, 0); options.ReportApiVersions = true; });

14. İçerik Müzakereleri

Konsept

İçerik anlaşması, bir API'nin istekteki Accept başlığına göre farklı yanıt formatları sunmasına olanak tanır ve JSON, XML vb. formatlar için destek sağlar.

Kod Örneği

 builder.Services.AddControllers() .AddXmlDataContractSerializerFormatters();

15. Özel JSON Serileştirme Ayarları

Konsept

JSON seri hale getirici ayarlarını yapılandırarak, camelCase adlandırma veya boş değerleri yok sayma gibi JSON yanıt biçimlendirmesini özelleştirin.

Kod Örneği

 builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; options.JsonSerializerOptions.IgnoreNullValues = true; });

16. CORS'u Yapılandırma

Konsept

Çapraz Kaynaklı Kaynak Paylaşımı (CORS), API'nizin farklı alanlarda barındırılan web uygulamalarından çağrılmasına olanak tanır. CORS ilkesini gereksinimlerinize göre yapılandırın.

Kod Örneği

 builder.Services.AddCors(options => { options.AddPolicy("AllowSpecificOrigin", builder => builder.WithOrigins("http://example.com")); }); app.UseCors("AllowSpecificOrigin");

17. Kimlik Doğrulama

Konsept

İstekte bulunan kullanıcıların veya hizmetlerin kimliğini doğrulayan kimlik doğrulamayı etkinleştirerek API'nizi güvence altına alın.

Kod Örneği

 builder.Services.AddAuthentication("Bearer") .AddJwtBearer(options => { options.Authority = "https://your-auth-server"; options.Audience = "your-api"; });

18. Yetkilendirme

Konsept

Kimlik doğrulamanın ardından yetkilendirme, kimliği doğrulanmış bir kullanıcının bir eylemi gerçekleştirme veya bir kaynağa erişme iznine sahip olup olmadığını belirler.

Kod Örneği

 [Authorize] public class SecureController : ControllerBase { // Action methods here }

19. Swagger/OpenAPI Entegrasyonu

Konsept

Swagger (OpenAPI), API'niz için etkileşimli belgeler sağlayarak geliştiricilerin onu kolayca anlamasına ve kullanmasına olanak tanır.

Kod Örneği

 builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); app.UseSwagger(); app.UseSwaggerUI();

20. Günlüğe kaydetme

Konsept

.NET Core, mesajları çeşitli çıkışlara (konsol, hata ayıklama penceresi, harici hizmetler vb.) günlüğe kaydedebilen yerleşik bir günlük kaydı çerçevesi sağlar.

Kod Örneği

 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 });

21. Entity Framework Core'u Kullanma

Konsept

Entity Framework Core, .NET uygulamalarında veri erişimi için kullanılan bir ORM'dir. Güçlü yazılan nesneleri kullanarak verileri sorgulamanıza ve değiştirmenize olanak tanır.

Kod Örneği

 public class MyDbContext : DbContext { public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) {} public DbSet<MyModel> MyModels { get; set; } }

22. Varlık Çerçevesi Çekirdeğindeki Geçişler

Konsept

Geçişler, veri modellerinizdeki değişiklikleri izleyerek veritabanı şemanıza sürüm kontrolü uygulamanıza olanak tanır.

Kod Örneği

 dotnet ef migrations add InitialCreate dotnet ef database update

23. Depo Modeli

Konsept

Depo modeli veri katmanını soyutlayarak uygulamanızı daha modüler ve bakımı daha kolay hale getirir.

Kod Örneği

 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... }

24. Birim Testi

Konsept

Birim testi, ayrı ayrı kod birimlerini ayrı ayrı test ederek Web API'nizin doğru şekilde çalışmasını sağlar.

Kod Örneği

 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); } }

25. Ön Uçla Entegrasyon

Konsept

.NET Web API, RESTful hizmetleri sağlayan bir ön uç uygulaması için arka uç görevi görebilir.

Kod Örneği

 fetch('https://localhost:5001/mycontroller') .then(response => response.json()) .then(data => console.log(data));

26. Sağlık Kontrolleri

Konsept

Durum denetimleri, uygulamanızın durumunu ve bağımlılıklarını izlemenin bir yolunu sağlar; mikro hizmet mimarileri için faydalıdır.

Kod Örneği

 builder.Services.AddHealthChecks(); app.MapHealthChecks("/health");

27. Gerçek Zamanlı İletişim için SignalR'ı Kullanmak

Konsept

SignalR, sunucu tarafı kodunun istemci tarafı web uygulamalarına eşzamansız bildirimler göndermesine olanak tanıyarak gerçek zamanlı web işlevselliğini sağlar.

Kod Örneği

 public class MyHub : Hub { public async Task SendMessage(string user, string message) { await Clients.All.SendAsync("ReceiveMessage", user, message); } }

28. Yanıt Önbelleğe Alma İşlemini Yapılandırma

Konsept

Yanıt önbelleğe alma, daha önce istenen kaynakların bir kopyasını depolayarak bir sunucunun işlemesi gereken isteklerin sayısını azaltır.

Kod Örneği

 [HttpGet("{id}")] [ResponseCache(Duration = 60)] public IActionResult GetById(int id) { // Retrieve and return your resource }

29. Statik Dosyalar

Konsept

Statik dosyaların (HTML, CSS, JavaScript vb.) sunulması, ön uç uygulamaların .NET Web API ile desteklenmesi için önemlidir.

Kod Örneği

 app.UseStaticFiles(); // Enable static file serving

30. Gelişmiş Yapılandırma ve Seçenekler Modeli

Konsept

Seçenekler modeli, ilgili ayar gruplarını temsil etmek için sınıfları kullanır. IOptions<T>'yi kullanarak bu ayarlara uygulamanızın herhangi bir yerinden erişebilirsiniz.

Kod Örneği

 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 }

31. Özel Ara Yazılım

Konsept

Ara yazılım, istekleri ve yanıtları işlemek için bir uygulama hattında bir araya getirilen yazılımdır. Belirli görevleri gerçekleştirmek için özel ara katman yazılımı oluşturulabilir.

Kod Örneği

 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>(); } }

32. Hız Sınırlaması

Konsept

Hız sınırlama, bir kullanıcının belirli bir zaman dilimi içinde ne sıklıkta istekte bulunabileceğini sınırlayarak API'nizi aşırı kullanıma karşı korur.

Kod Örneği

 // 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" } }; });

33. API Anahtarları Kimlik Doğrulaması

Konsept

API anahtarları, API çağrılarının kimliğini doğrulamanın ve yetkilendirmenin basit bir yoludur. İstemciden sunucuya sorgu dizesinde veya başlıkta aktarılırlar.

Kod Örneği

 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); } }

34. Çıktı Önbelleğe Alma

Konsept

Çıktı önbelleğe alma, bir isteğe verilen yanıtı saklamanıza olanak tanır. Sonraki istekler önbellekten sunulabilir ve bu da performansı önemli ölçüde artırır.

Kod Örneği

 [HttpGet] [ResponseCache(Duration = 120, Location = ResponseCacheLocation.Client, NoStore = false)] public IActionResult Get() { // Your logic here }

35. Arka Plan Görevleri

Konsept

Arka plan görevleri, e-posta gönderme veya uzun süren işleri işleme gibi işlemlerin kullanıcı isteklerinden bağımsız olarak arka planda yürütülmesine olanak tanır.

Kod Örneği

 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); } } }

36. WebSoketleri

Konsept

WebSockets, gerçek zamanlı uygulamalar için ideal olan tek, uzun ömürlü bir bağlantı üzerinden tam çift yönlü bir iletişim kanalı sağlar.

Kod Örneği

 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(); } });

37. Yerelleştirme Talep Edin

Konsept

İstek yerelleştirmesi, isteğin bilgilerine dayalı olarak içeriği farklı kültürler ve diller için yerelleştirmenin bir yolunu sağlar.

Kod Örneği

 var supportedCultures = new[] { "en-US", "fr-FR" }; var localizationOptions = new RequestLocalizationOptions() .SetDefaultCulture(supportedCultures[0]) .AddSupportedCultures(supportedCultures) .AddSupportedUICultures(supportedCultures); app.UseRequestLocalization(localizationOptions);

38. GraphQL ile entegrasyon

Konsept

GraphQL, API'ler için bir sorgulama dilidir. Bir .NET Web API'sinin GraphQL ile entegre edilmesi, daha verimli veri alımına olanak tanır.

Kod Örneği

 // Assume using a library like HotChocolate builder.Services .AddGraphQLServer() .AddQueryType<Query>(); app.MapGraphQL();

39. İzleme ve Telemetri

Konsept

İzleme ve telemetri, uygulamanızın performansı ve kullanımına ilişkin verilerin toplanmasını, analiz edilmesini ve bunlara göre hareket edilmesini içerir.

Kod Örneği

 // Assume using Application Insights builder.Services.AddApplicationInsightsTelemetry("YOUR_INSTRUMENTATION_KEY");

40. SignalR Hub'ları ve Gerçek Zamanlı İletişim

Konsept

SignalR, uygulamalara gerçek zamanlı web işlevselliği eklemeyi kolaylaştıran bir kitaplıktır. Gerçek zamanlı web işlevselliği, sunucunun bir istemcinin yeni veri istemesini beklemesini gerektirmeden, sunucu kodunun içeriği bağlı istemcilere anında iletebilmesi yeteneğidir. SignalR, sohbet uygulamaları, gerçek zamanlı kontrol panelleri ve daha etkileşimli web uygulamaları geliştirmek için mükemmeldir.

Kod Örneği

 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'ye entegrasyon:

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // Other configurations... app.UseEndpoints(endpoints => { endpoints.MapHub<ChatHub>("/chathub"); }); }

41. Gelişmiş Varlık Çerçevesi Çekirdeği - İlişkiler

Konsept

Entity Framework Core, varlıklar arasındaki bire bir, bire çok ve çoktan çoğa gibi karmaşık ilişkilerin eşlenmesine olanak tanır.

Kod Örneği

 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; } }

42. Özel Doğrulama Nitelikleri

Konsept

Özel doğrulama nitelikleri, yerleşik doğrulama niteliklerini genişleterek veri modelleri için doğrulama mantığınızı tanımlamanıza olanak tanır.

Kod Örneği

 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; } }

43. Gelişmiş Yapılandırma Senaryoları

Konsept

.NET'in seçenekler modeli, iç içe geçmiş nesneler, listeler ve doğrulama dahil olmak üzere karmaşık yapılandırma senaryolarını destekler.

Kod Örneği

 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"));

44. Performans İzleme ve Profil Oluşturma

Konsept

Bir uygulamanın izlenmesi ve profilinin çıkarılması, performansı optimize etmek için gerekli olan darboğazları ve verimsizlikleri belirleyebilir.

Kod Örneği

 app.UseMiniProfiler();

45. Swagger ve XML Yorumlarıyla API Dokümantasyonu

Konsept

XML yorumlarını Swagger kullanıcı arayüzünüze entegre ederek API belgelerinizi geliştirin ve API'nizi kullanan geliştiricilere daha zengin bir deneyim sağlayın.

Kod Örneği

 builder.Services.AddSwaggerGen(c => { var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); c.IncludeXmlComments(xmlPath); });

46. Küreselleşme ve Yerelleştirme

Konsept

Küreselleştirme ve yerelleştirme, uygulamanızın birden çok dili ve kültürü desteklemesine olanak tanıyarak onu küresel bir hedef kitle için erişilebilir hale getirir.

Kod Örneği

 builder.Services.AddLocalization(options => options.ResourcesPath = "Resources"); app.UseRequestLocalization(app.Services.GetRequiredService<IOptions<RequestLocalizationOptions>>().Value);

47. Güvenlik Başlıkları

Konsept

Çeşitli HTTP üstbilgileri ekleyerek web uygulamanızın güvenliğini artırmak, yaygın saldırılara ve güvenlik açıklarına karşı koruma sağlayabilir.

Kod Örneği

 app.UseHsts(); app.UseXContentTypeOptions(); app.UseReferrerPolicy(opts => opts.NoReferrer()); app.UseXXssProtection(options => options.EnabledWithBlockMode()); app.UseXfo(options => options.Deny());

48. Özellik Bayrakları

Konsept

Özellik bayrakları, yeni kod dağıtmadan uygulamanızın özelliklerini açıp kapatmanıza olanak tanıyarak test etme ve kullanıma sunma işlemlerini kolaylaştırır.

Kod Örneği

 // Using a library like Microsoft.FeatureManagement builder.Services.AddFeatureManagement();

49. Blazor Entegrasyonu

Konsept

Blazor, JavaScript yerine C# kullanarak etkileşimli web kullanıcı arayüzleri oluşturmanıza olanak tanır. Blazor'un Web API ile entegre edilmesi kusursuz bir tam yığın geliştirme deneyimi sağlar.

Kod Örneği

 // In a Blazor Server app @code { private IEnumerable<WeatherForecast> forecasts; protected override async Task OnInitializedAsync() { forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast"); } }

50. Yanıt Sıkıştırma için Gelişmiş Ara Yazılım

Konsept

Yanıt sıkıştırma, API yanıtlarınızın boyutunu azaltarak yavaş ağlar üzerindeki istemciler için yükleme sürelerini iyileştirebilir.

Kod Örneği

 builder.Services.AddResponseCompression(options => { options.Providers.Add<GzipCompressionProvider>(); options.EnableForHttps = true; }); app.UseResponseCompression();

C# Programlama🚀

C# topluluğunun bir parçası olduğunuz için teşekkür ederiz! Sen ayrılmadan:

Buraya kadar geldiyseniz lütfen takdirinizi alkışlayarak gösterin ve yazarı takip edin! 👏️️

Bizi takip edin: X | LinkedIn | Geliştirme | Hashnode | Bülten | Tumblr

Diğer platformlarımızı ziyaret edin: GitHub | instagram | Tiktok | Quora | Daily.dev


Burada da yayınlandı