首页 > 解决方案 > 即使我允许所有来源,为什么我会收到 CORS 错误?

问题描述

所以我使用 Vue 制作了一个 Web 应用程序,并且我使用 ASP.NET Web App (.NET 5) 作为后端。当我在本地运行 Web API 时,localhost:44393它可以很好地从本地运行的客户端发出 POST 和 GET 请求。然后我点击“发布”将文件发送到我托管的地方。

此时,我将客户端用于向https://api.mywebsite.com发出请求的 URL 更改为与我现在发布它以来在本地运行的网站相同的网站。(它使用 fetch 发出这些请求fetch("https://api.mywebsite.com/TheController/AddServer",例如)

这就是它变得奇怪的地方,因为当我发出注册或登录的帖子请求时,它工作得很好,但是一旦我进入“添加帖子”,这是一个发布到 API 上不同端点的表单,我得到这个错误。

CORS 政策已阻止从源“https://mywebsite.com”获取“https://api.mywebsite.com/TheController/AddPost”的访问权限:不存在“Access-Control-Allow-Origin”标头在请求的资源上。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。

当我在本地运行 Web API 时,这不会发生。为什么它仅在我将文件发布到主机并使用实际域后才会发生?(当它也在本地运行时,我尝试从客户端发出相同的请求,但它给出了完全相同的异常)

我将问题中的域名切换为,mywebsite.com因为我不想分享它。

这是我的配置服务

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy(name: MyAllowSpecificOrigins,
                      builder =>
                      {
                          builder.WithOrigins("https://mywebsite.com",
                                              "http://localhost:8080",
                                              "https://mywebsite.com/add")
                                              .AllowAnyOrigin()
                                              .AllowAnyHeader()
                                              .AllowAnyMethod();
                      });

    });
...

和配置

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "mcraftserverapi v1"));
            }
            app.UseHttpsRedirection();
            app.UseRouting();

            app.UseCors(MyAllowSpecificOrigins);

            app.UseAuthentication();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapDefaultControllerRoute();
                endpoints.MapControllers()
                     .RequireCors(MyAllowSpecificOrigins);
            });
        }

标签: c#corsasp.net-core-webapi

解决方案


你必须删除

 builder.WithOrigins("https://mywebsite.com",
  "http://localhost:8080"
 )

或者

.AllowAnyOrigin()

你不能一起使用它们


推荐阅读