如何在核心 Web API 项目中允许具有 IP 地址 ASP.NET CORS?

How to allow CORS with IP address in ASP.NET Core Web API project?

提问人:봊Ì'ɱ Јìԥ 提问时间:10/25/2023 最后编辑:Brian Tompsett - 汤莱恩봊Ì'ɱ Јìԥ 更新时间:10/25/2023 访问量:113

问:

我正在使用 ASP.NET Core Web API 项目,我想允许使用某人的 IP 地址的 CORS 策略,并且我想允许 IP 地址范围。使用此 CORS 方法,这是允许每个人的 CORS,我只想允许一个 IP 地址。谁能帮我?

这是我允许文件中每个人使用 CORS 的方法。Program.cs

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// Add CORS support
builder.Services.AddCors(options =>
{
    options.AddDefaultPolicy(builder =>
    {
        builder.AllowAnyOrigin()
               .AllowAnyMethod()
               .AllowAnyHeader();
    });
});

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

// Enable CORS
app.UseCors();

app.MapControllers();

app.Run();
C# cors asp.net-core-webapi IP 地址

评论

1赞 Danny Fardy Jhonston Bermúdez 10/25/2023
嗨,你检查过这个问题吗?stackoverflow.com/questions/55398058/......

答:

2赞 Jason Pan 10/25/2023 #1

您可以使用它来实现它。SetIsOriginAllowed

builder.Services.AddCors(options =>
{
    options.AddDefaultPolicy(policyBuilder =>
    {
        policyBuilder.SetIsOriginAllowed(origin =>
        {
            // Convert domain to IP 
            // be careful, domains can have multiple IPs
            var host = new Uri(origin).Host;
            var ipAddresses = Dns.GetHostAddresses(host);

            // List of allowed IPs
            var allowedIPs = new List<IPAddress>
            {
                IPAddress.Parse("192.168.1.1"), // Replace with your allowed IPs
                IPAddress.Parse("192.168.1.2")  // Another IP
            };

            return ipAddresses.Any(ip => allowedIPs.Contains(ip));
        })
        .AllowAnyMethod()
        .AllowAnyHeader();
    });
});

评论

0赞 jub0bs 10/25/2023
但是,为什么要在每次调用回调时一次又一次地解析相同的 IP 地址呢?您不能一劳永逸地在回调之外解析它们吗?此外,我认为 OP 对允许 IP 范围感兴趣(无论好坏......
1赞 Jason Pan 10/25/2023
嗨@jub0bs,在我的理解中,UseCors 最初是一个中间件。对于其他使用域名的方法,每次都会解析,对吧?
1赞 jub0bs 10/25/2023
@JasonPan 我的建议是,计算只需要发生一次(在初始化时),而不是每次调用中间件时。allowedIPs