NET CORE 6.0 IIS 跨域请求问题

问题遇到的现象和发生背景

webapi 项目放到云服务器上,外网不能访问api站点,但是服务器自身用公网ip,还有同网段的其他服务器用公网ip都可以访问,我在本地访问报这个错误,防火墙也关掉了,部署的其他站点可以访问

运行结果及报错内容

Request URL: http://103.39.223.xx:8008/swagger/index.html
Referrer Policy: strict-origin-when-cross-origin

我的解答思路和尝试过的方法

我在start.cs 里边加了跨域,同IP段的web是可以访问接口的,但是外网就是访问不了

  • img

我想要达到的结果

img


AllowAnyOrigin() //允许任何来源的主机访问
https://blog.csdn.net/d1332508051/article/details/107822820

在.NET 6中,AllowAnyOrigin()方法对任意的源不再可用,要实现跨域,可以通过WithOrigins()方法指定单个或多个允许跨域的地址,如下:

namespace WebApplication6
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var policyName = "AllowSpecificOrigins";
            var builder = WebApplication.CreateBuilder(args);
            builder.Services.AddControllers();
            builder.Services.AddEndpointsApiExplorer();
            builder.Services.AddSwaggerGen();
            builder.Services.AddCors(options =>
            {
                options.AddPolicy(name: policyName,
                    policyBuilder =>
                    {
                        policyBuilder
                            .WithOrigins("http://localhost:3000", "http://localhost:3001", "http://localhost:3002")
                            .AllowAnyMethod()
                            .AllowAnyHeader();
                    });
            });
            var app = builder.Build();
            if (app.Environment.IsDevelopment())
            {
                app.UseSwagger();
                app.UseSwaggerUI();
            }

            app.UseCors(policyName);
            app.UseAuthorization();

            app.MapControllers();

            app.Run();
        }
    }
}

或者,你如果需要允许所有源,则可通过SetIsOriginAllowed()方法配置允许所有源跨域,示例如下:

img

这个也试过了,外网还是不能访问,同台机器的前端项目一直是可以访问到后台接口的

要么使用nginx 转发到域名?

不一定是你的站点的问题,外网访问需要配置路由,是不是路由没有配置好呢?可以先看看其他站点通过路由是否可以联通。

已经报跨域错误说明外网是通的,是内部跨域处理的问题。

你放到云服器上的WebAPI,现在你需要外网访问,首先你得确保你的云服务支持让你对外网开访问权限。
比如你现在的WebAPI部署到阿里云的ECS主机上,那么默认ECS主机是禁止让你开放服务的,你要想开放服务,就需要在控制台去添加外网可以访问的端口已经可以被访问到的公网IP,且需要在控制台上配置端口映射到你的WebAPI机器上,这样子外网才能访问到。

以上如果还有疑问可以消息

在startup.cs中,试试这种写法:

services.AddCors(options => {
                options.AddPolicy("CorsPolicy", builder => { builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader(); });
            });

 app.UseStaticFiles(new StaticFileOptions
            {
                OnPrepareResponse = (c) =>
                {
                    if (!c.Context.Response.Headers.ContainsKey("Access-Control-Allow-Origin"))
                        c.Context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
                }
            });

应该是你这个8080端口在云服务器策略中没有开通外网访问的。一般阿里云的虚拟机都是有一个内部IP,一个外网IP。在阿里云控制台上,看看安全组的策略配置