从托管在被 CORS 策略阻止的 Asp.net 核心 Web 服务器中的 Angular 应用程序调用我的休息服务

Posted

技术标签:

【中文标题】从托管在被 CORS 策略阻止的 Asp.net 核心 Web 服务器中的 Angular 应用程序调用我的休息服务【英文标题】:Call to my rest service from Angular app hosted in Asp.net core web server blocked by CORS policy 【发布时间】:2020-09-11 20:07:41 【问题描述】:

我有一个托管在 Asp.net 核心 Web 服务器中的 Angular 应用程序,虽然这个 Angular 应用程序我正在调用另一个 Rest api 服务来获取一些数据,但我对外部 Rest Service api 的调用被 CORS 策略阻止。

我在浏览器中遇到的错误是 -

和我的 Asp.net 服务器应用程序 Startup.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace WebclientServer

public class Startup

    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit 
    https://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    
        services.AddCors(options =>
        
          options.AddPolicy("CorsPolicy",
              builder => builder.AllowAnyOrigin()
                  .AllowAnyMethod()
                  .AllowAnyHeader());
        );
        services.AddMvc();

    

    // This method gets called by the runtime. Use this method to configure the HTTP request 
    pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    
        //if (env.IsDevelopment())
        //
        //    app.UseDeveloperExceptionPage();
        //

        //app.UseRouting();

        //app.UseEndpoints(endpoints =>
        //
        //    endpoints.MapGet("/", async context =>
        //    
        //        await context.Response.WriteAsync("Hello World!");
        //    );
        //);

        app.UseCors("CorsPolicy");

        app.Use(async (context, next) => 
            await next();
            if (context.Response.StatusCode == 404 &&
               !Path.HasExtension(context.Request.Path.Value) &&
               !context.Request.Path.Value.StartsWith("/api/"))
            
                context.Request.Path = "/index.html";
                await next();
            
        );
        //app.UseMvcWithDefaultRoute();
        app.UseDefaultFiles();
        app.UseStaticFiles();
    
  

我已通过此链接How to enable CORS in ASP.net Core WebAPI 阅读了有关如何在 Internet 上解决此错误的信息,但在我的情况下没有成功。请不要介意我是 Web 开发的新手,并且在 CORS 策略错误上我已经卡了好几天了。请帮助我如何解决这个错误。我还必须在我的 External Rest api 服务上启用 CORS。 谢谢!

【问题讨论】:

使用jsonp:***.com/a/2067584/240564 【参考方案1】:

CORS 是服务器端“问题”,而不是客户端。所以,我想,你不应该尝试在你的客户端上修复它(即,Angular,即使它托管在 X 服务器类型上)。这就是为什么,我认为,您的 ASP.net 修复程序不起作用。尝试在客户端修复 CORS,虽然有时可能,但大多数时候会导致错误或只是服务器忽略/阻止请求。

最简单的方法是在您的服务器端配置 CORS。您已指定您正在访问外部 REST API。因此,您必须深入挖掘并忘记客户端修复。

【讨论】:

是的,我已经弄清楚了,问题出在 External Rest API 服务器端,我已经启用了 CORS,现在它可以工作了。

以上是关于从托管在被 CORS 策略阻止的 Asp.net 核心 Web 服务器中的 Angular 应用程序调用我的休息服务的主要内容,如果未能解决你的问题,请参考以下文章

azure 应用服务和 asp.net 核心:CORS 策略甚至 AllowAnyOrigin 也阻止了来源

即使在配置 ASP.NET Core Web API 中启用了 CORS,CORS 也会阻止发布请求

如何修复 - 重新登录时,CORS 策略已阻止访问“https://login.windows.net......”获取

仅在文件上传中出现 Asp.Net Core API CORS 策略错误

来自 ASP NET Web API 的 CORS 阻止 Ajax POST 调用 - 对预检请求的响应未通过访问控制检查

ASP.NET CORS 阻止字体请求