net.core 和 angular4 应用程序的 Cors 问题 - 适用于 azurewebsites.net 域而不是自定义

Posted

技术标签:

【中文标题】net.core 和 angular4 应用程序的 Cors 问题 - 适用于 azurewebsites.net 域而不是自定义【英文标题】:Cors issue with net.core and angular4 app - works on azurewebsites.net domain not on custom 【发布时间】:2018-09-09 02:21:08 【问题描述】:

我在 azurewebsites.net 域上托管开发环境。Webapp 位于 webapp.azurewebsites.net Api 在 api.azurewebsites.net 上

此方案运行正常,这意味着应用程序客户端和 api 服务器端已正确设置(cors)。

问题出现在我安装了自定义域和 https 证书的现场场景中: Webapp 位于 www.webapp.com Api 在 api.webapp.com 上

我检查了 3 次 build 是否正确替换了 cors origin 设置 (web.config) 的值,所有值都正确,但在实时自定义域上仍然出现错误。

错误:

无法加载https://api.webapp.com/api/connect/token:响应 预检请求未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://www.webapp.com” 访问。

当然,我通过邮递员访问 api 没有问题。

API 启动.cs:

public IServiceProvider ConfigureServices(IServiceCollection services)
        
            services.AddApplicationInsightsTelemetry(Configuration);

            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            services.AddIdentity<ApplicationUser, ApplicationRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

            services.AddCors(options =>
            
                options.AddPolicy("CorsPolicy",
                    builder => builder.WithOrigins(Configuration.GetSection("HostSettings:WebAppClientUrl").Value.ToString())
                        .AllowAnyMethod()
                        .AllowAnyHeader()
                        .AllowCredentials());
            );

            ConfigureDependencyInjection(services);

            // Register the Swagger generator, defining one or more Swagger documents
            services.AddSwaggerGen(x =>
            
                x.SwaggerDoc("v1", new Info  Title = "API", Version = "v1" );

                // UseFullTypeNameInSchemaIds replacement for .NET Core
                x.CustomSchemaIds(y => y.FullName);

                //Set the comments path for the swagger json and ui.
                var basePath = PlatformServices.Default.Application.ApplicationBasePath;
                var xmlPath = Path.Combine(basePath, "Api.xml");
                x.IncludeXmlComments(xmlPath);
            );

            // Add framework services.
            services
                .AddMvc()
                .AddFluentValidation(x => x.RegisterValidatorsFromAssemblyContaining<CreateViewModelValidator>());

            services.AddMvcCore()
                .AddJsonFormatters(x => x.Converters.Add(new StringEnumConverter()));

            // Add di framework
            var container = new Container(new DependencyInjectionRegistry());
            container.Populate(services);

            services.AddAutoMapper(cfg => cfg.ConstructServicesUsing(container.GetInstance));
            Mapper.AssertConfigurationIsValid();

            return container.GetInstance<IServiceProvider>();
        

也在configure方法中:

    app.UseCors("CorsPolicy");

应用程序设置.json:

  "HostSettings": 
    "WebAppClientUrl": "https://www.webapp.com"
  

【问题讨论】:

您能否在 web.config 和您的代码中向我们展示任何与 CORS 相关的行。 您需要在配置/配置服务方法的启动类上配置它。不确定您对 web.config 的含义。在此处发布您的创业课程,以便我们查看。 我添加了startup.cs代码 【参考方案1】:

我必须去 Azure 并在那里设置 CORS on web api。

【讨论】:

以上是关于net.core 和 angular4 应用程序的 Cors 问题 - 适用于 azurewebsites.net 域而不是自定义的主要内容,如果未能解决你的问题,请参考以下文章

使用angular4和asp.net core 2 web api做个练习项目

使用angular4和asp.net core 2 web api做个练习项目

将 .Net Core 2.0 和 Angular4 部署到 AWS 后无法发布到 Sqlite 数据库

使用 Asp.net Core 诊断 Angular4 服务器端渲染的问题

使用 Google Auth、Angular 4、ASP.Net Core 2 进行身份验证时出现 405

.Net Core API CORS,仅锁定一个域(Angular 应用程序)