请求的资源上显示“ Access-Control-Allow-Origin”标头

时间:2020-03-30 20:16:02

标签: angular api cors

我正在尝试使用Cors在Angular和.net API之间建立连接。我不断收到此错误:

localhost/:1 Access to XMLHttpRequest at 'https://localhost:44378/api/OffRec' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

为了解决此错误。我在自己的ConfigureServices中添加了addCors,在Configure中添加了userCors,如下所示:

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                builder =>
                {
                    builder.WithOrigins(new string[] { "http://localhost:4200" , "https://localhost:44378/api/offrec" }).AllowAnyMethod().WithHeaders("Access-Control-Allow-Origin");
                });
            });

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
                services.AddControllers();
               services.AddDbContext<db_recloadContext>();
        }

我的Configure方法仅使用cors:

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();

            }
            else
            {
                app.UseHsts();
            }
            app.UseRouting();
            app.UseCors("CorsPolicy");
           app.UseHttpsRedirection();

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

我的api有一个非常简单的代码,该代码返回一个字符串,当我运行我的api时,它可以正常工作。

过去2天,我一直在努力解决此错误。任何提示或帮助将不胜感激。

这是我根据以下答案尝试的操作仍然出现相同的错误:

 services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                builder =>
                {
                    builder.WithOrigins(new string[] { "http://localhost:4200" , "https://localhost:44378/api/offrec" }).AllowAnyMethod().WithHeaders("Access-Control-Allow-Origin:*");
                });
            });

下面是错误的图片:

enter image description here

以下是我的api:

namespace RecLoad.Controllers
{
    [Route("api/[controller]")]
    [EnableCors("AllowAnyCorsPolicy")]

   [HttpGet]
       public ActionResult<string> Get()
        {

            return "This is a test";

        }

1 个答案:

答案 0 :(得分:0)

CORS是一种工具,可让某些服务的所有者限制可以从何处访问该服务。您有一个位于localhost:4200的网站,并且它正在与localhost:44378的Web服务联系以请求一些数据。我知道它们都是本地主机,但是它们是不同的东西。它们也可能是http://mysite.example上的脚本,试图从http://remoteservice.example获取数据。

因此,您的浏览器在4200网站上的页面上运行脚本,知道,该服务器正在与一台与其下载脚本的服务器不同的服务器联系,因此该服务器对另一台服务器说服务器“嘿,告诉我您将接受来自/ api / offRec上的资源的请求的服务器是什么”,服务器(在44378处)响应诸如“我将只允许从我那里下载的脚本”这样的响应。

此时,您的浏览器暂停了该请求; “外部”服务器并未表示愿意将该资源提供给您的脚本

作为44378服务器的管理员,您需要做的是在其配置中添加一些CORS标头,说“ Access-Control-Allow-Origin:*”或“ Access-Control-Allow-Origin:{ {3}}”等,这样,当在站点4200上的站点上运行脚本的浏览器从44378资源中请求信息时,它得到的响应还包含一个允许访问的标头


请重申一下,以防万一我不清楚:运行44378站点的服务器必须添加标头,而不是4200站点

使用网络浏览器向44378网站发出请求,并在开发工具检查器中查看标题。如果没有看到Access-Control-Allow-Origin标头,请重新配置它,直到您这样做