Yükleniyor

.NET’te CORS Kullanımı

Blog Kategorileri

.Net Core Mimariler
Tasarım Desenleri
ORM Araçları
API Geliştirme
Web Geliştirme
Veritabanları
11 Aralık 2025 Perşembe
.NET’te CORS Kullanımı

Merhaba,

Modern web uygulamalarının büyük çoğunluğu dağıtık bir mimari üzerinde çalışır. Frontend, backend, API Gateway, mikro servisler veya üçüncü taraf servisler farklı domain’lerde konumlanabilir. Bu yapı, HTTP tabanlı bir güvenlik mekanizması olan Cross-Origin Resource Sharing (CORS) ile doğrudan etkileşimlidir. CORS, tarayıcıların farklı kökenler (origin) arasında istek yapılmasını kontrol eden bir güvenlik politikasının parçasıdır.

Bu yazıda .NET platformunda CORS’un nasıl aktif edildiğini, nasıl yönetildiğini, üretim ortamı için en iyi pratikleri ve sık karşılaşılan sorunları ele alacağım.

CORS Nedir ve Neden Önemlidir?

Origin, protokol + domain + port bileşimidir. Örneğin:

  1. https://sinantosun.com → Origin: https + sinantosun.com

  2. http://localhost:4200 → Origin: http + localhost + 4200

Tarayıcı, bir web sayfasının başka bir origin'e ait API’ye request göndermesini varsayılan olarak yasaklar. Bu durum, same-origin policy olarak bilinir.

CORS ise aynı policy’nin kontrollü biçimde esnetilmesini sağlar. Sunucu tarafında belirlenen izinler doğrultusunda, tarayıcı güvenli bir şekilde cross-origin talepleri kabul eder.

.NET’te CORS Nasıl Etkinleştirilir?

.NET Core 2.1’den itibaren CORS kullanımı, Microsoft.AspNetCore.Cors paketi içerisinde doğal olarak gelir; ayrıca bir kurulum gerektirmez.

CORS tanımlaması iki aşamada yapılır:

  1. CORS policy tanımlama

  2. CORS policy uygulama

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowSpecificOrigins", policy =>
    {
        policy.WithOrigins("https://example.com", "http://localhost:4200")
              .AllowAnyHeader()
              .AllowAnyMethod()
              .AllowCredentials();
    });
});

builder.Services.AddControllers();

var app = builder.Build();

app.UseCors("AllowSpecificOrigins");

app.MapControllers();

app.Run();

Açıklama

  1. WithOrigins() → Yalnızca istenilen domain’lere izin verir.

  2. AllowAnyHeader() → Custom header gönderimine izin verir.

  3. AllowAnyMethod() → GET, POST, PUT, DELETE vb. tüm HTTP metodlarına izin verir.

  4. AllowCredentials() → Cookie veya Authorization header taşıyan istekleri kabul eder.

  5. app.UseCors("AllowSpecificOrigins") → AddCors ile tanımladığımız "AllowSpecificOrigins" politikasını dahil eder.

Controller Bazlı CORS Kullanımı

Her istek için tüm uygulama seviyesinde CORS açmak yerine, sadece belirli controller/action seviyesinde CORS'u etkinleştirebilirsiniz.

[ApiController]
[Route("api/[controller]")]
[EnableCors("AllowSpecificOrigins")]
public class ProductsController : ControllerBase
{
    [HttpGet]
    public IActionResult Get() => Ok("Products");
}

Controller seviyesinde tanımlı policy, uygulama seviyesinde tanımlı politikayı geçersiz kılar.

Geliştirme Ortamında Esnek CORS Tanımı

Frontend geliştirme aşamasında sık sık domain veya port değiştiği için esnek bir policy daha verimli olacaktır.

builder.Services.AddCors(options =>
{
    options.AddPolicy("DevCors", policy =>
    {
        policy.AllowAnyOrigin()
              .AllowAnyHeader()
              .AllowAnyMethod();
    });
});

AllowAnyOrigin() →Herhangi bir origin’den (domain, port, scheme) gelen isteklere izin vermek için kullanılır.

Ancak AllowAnyOrigin + AllowCredentials birlikte kullanılamaz. Güvenlik kuralı gereği tarayıcı bunu engeller. 

Production Ortamında Cors Tanımı

Gerçek sistemlerde CORS tanımı minimalist ve kontrollü olmalıdır.

1. Sadece Bilinen Kökenlere İzin Verin

  1. Wildcard (*) kullanmayın.

  2. Domainleri kesin bir şekilde listeleyin.

2. Credentials Gerekmiyorsa Kapalı Tutun

Cookie veya session taşımıyorsanız AllowCredentials() kullanmayın.

Sık Karşılaşılan CORS Hataları ve Çözümleri

Hata: No 'Access-Control-Allow-Origin' header is present…

Sorun: API bu domain’e izin vermemiştir.

Çözüm: Policy’ye domain'i ekleyin. 


Hata: The value of the ‘Access-Control-Allow-Origin’ header in the response must not be the wildcard ‘*’ when the request’s credentials mode is ‘include’.

Sorun: AllowAnyOrigin() ile AllowCredentials() beraber kullanılmış.

Çözüm: Belirli domainleri WithOrigins() ile tanımlayın.


Sonuç

CORS, modern web uygulamalarının güvenli ve kontrollü bir şekilde iletişim kurmasını sağlayan kritik bir mekanizmadır. .NET, CORS yönetimini hem uygulama hem de controller seviyesinde güçlü bir konfigürasyon modeli ile sağlar. Doğru konfigürasyon yapıldığında, hem güvenliğin korunması hem de sistem bileşenleri arasındaki entegrasyon sorunsuz şekilde çalışır.

Bu kapsamlı yaklaşım; geliştirme, test ve production ortamlarında CORS’un doğru uygulanması için gerekli temel prensipleri ve pratik çözümleri içerir.

Diğer Bloglarımda Görüşmek Üzere 👋