← Барлық мақалаларға оралу

ASP.NET ішінде endpoints үшін әртүрлі CORS policies қолдану

Жарияланды

ASP.NET ішінде endpoints үшін әртүрлі CORS policies қолдану

Кейде application ішінде specific endpoints үшін әртүрлі CORS policies қажет болуы мүмкін. API endpoints-тің көбі тек sample.com доменінде hosted frontend-пен байланысады деп елестетейік. Сіз осы domain үшін general CORS policy, мысалы AllowSampleCom, баптайсыз және requests-ті тек sample.com origin-інен ғана рұқсат етесіз.

Бірақ бір немесе бірнеше endpoints басқа domain-нен, мысалы admin-sample.com, requests қабылдауы керек болуы мүмкін. Мұндай жағдайда осы domain үшін арнайы separate policy, мысалы AllowAdminSampleCom, жасау ыңғайлы.

public class Program
{
    public void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);
        builder.Services.AddControllers();
        builder.Services.AddCors(options =>
        {
            options.AddPolicy("AllowSampleCom", policy =>
            {
                policy.WithOrigins("https://sample.com")
                      .AllowAnyHeader()
                      .AllowAnyMethod();
            });
            options.AddPolicy("AllowAdminSampleCom", policy =>
            {
                policy.WithOrigins("https://admin-sample.com")
                      .AllowAnyHeader()
                      .AllowAnyMethod();
            });
        });

        var app = builder.Build();

        app.UseCors("AllowSampleCom");

        app.MapControllers();
        app.Run();
    }
}

Содан кейін бұл policy-ді endpoints-ке selectively қолдануға болады.

Controllers үшін attribute қолданыңыз:

[EnableCors("AllowAdminSampleCom")]

Minimal APIs үшін method қолданыңыз:

app.MapGet("/endpoint", handler).RequireCors("AllowAdminSampleCom");

Controller endpoint үшін simple example:

[ApiController]
[Route("api/[controller]")]
public class SampleController : ControllerBase
{
    [HttpPost("AddUser")]
    [EnableCors("AllowAdminSampleCom")]
    public IActionResult AddUser()
    {
        // Logic to add a user
        return Ok();
    }
}

Specific endpoints үшін CORS толық disable ету керек болса, мына attribute қолданыңыз:

[DisableCors]

Бұл approach flexibility береді: әр endpoint-тің specific needs бойынша CORS behavior баптауға және backend-ті secure әрі organized күйде ұстауға болады.