【问题标题】:Azure Proxy, CORS error when request IIS hosted APIAzure 代理,请求 IIS 托管 API 时出现 CORS 错误
【发布时间】:2020-10-12 13:27:33
【问题描述】:

我在 IIS 中托管了一个 WebAPI,现在因为我需要从任何地方访问我的 API,我创建了一个 azure 代理,但每次我使用我的 UI 发出请求时,我都会收到以下错误:

startup.cs

配置服务

services.AddCors(options =>
        {
            options.AddDefaultPolicy(
                builder =>
                {
                    builder
                    .SetIsOriginAllowed((string v) => _ = true)
                    .AllowAnyHeader()
                    .AllowAnyMethod()
                    .AllowCredentials();
                });
        });

配置

            app.UseSerilogRequestLogging();

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseCors();

        app.UseAuthentication();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });

如果我在 IIS 所在的网络中运行我的前端代码,而不是调用代理调用 API 的本地主机,它就可以正常工作。

【问题讨论】:

    标签: c# azure asp.net-core proxy asp.net-core-webapi


    【解决方案1】:

    您需要在 ConfigureServices 中添加mycors 规则。更多详情可以阅读the offical document

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>options.AddPolicy("mycors",
                 p => p.AllowAnyOrigin())
            );
            services.AddControllersWithViews();
        }
    

    然后在Configure函数中应用mycors

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
    
            //*****apply mycors****
    
            app.UseCors("mycors"); 
    
            //*********************
    
    
            app.UseHttpsRedirection();
            app.UseStaticFiles();
    
            app.UseRouting();
    
            app.UseAuthorization();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    

    我解散了我的两个项目。可以看源码,我已经实现了跨域功能。

    【讨论】:

    • 抱歉,响应时间太长,但我查看了 corss 错误并注意到当访问代理时,如果代理返回 401 Unauthorized 接收到的消息指的是 cors,即使它不是都是cors错误。因为该消息是协商期间 401 响应的结果。我想我需要重新考虑项目结构。
    猜你喜欢
    • 2014-01-12
    • 2014-03-18
    • 2022-10-15
    • 2021-12-13
    • 1970-01-01
    • 2022-01-22
    • 2018-05-28
    • 2022-01-06
    • 2019-09-09
    相关资源
    最近更新 更多