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 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何结合调试 Azure 应用服务和 IIS 托管的 WCF?

IIS充当代理转发请求到Kestrel

在Azure CDN中提供托管字体时出现CORS错误

Azure Rest API 附加现有托管磁盘

尝试在 Web API 请求上检索 Azure Blob 时出现 403 错误

在 IIS 7.5 中托管的 Web Api 中找不到 HTTP 404 页面