Azure 代理,请求 IIS 托管 API 时出现 CORS 错误

Posted

技术标签:

【中文标题】Azure 代理,请求 IIS 托管 API 时出现 CORS 错误【英文标题】:Azure Proxy, CORS error when request IIS hosted API 【发布时间】: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 的本地主机,它就可以正常工作。

【问题讨论】:

【参考方案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 响应的结果。我想我需要重新考虑项目结构。

以上是关于Azure 代理,请求 IIS 托管 API 时出现 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章