【问题标题】:CORS error working only for one controllerCORS 错误仅适用于一个控制器
【发布时间】:2020-06-02 06:14:14
【问题描述】:

我正在开发一个 dotnet core web api。

我的 API 托管在 localhost:44366 我的客户端应用程序托管在http://127.0.0.1:5501/(使用 vs code 实时服务器)

我正在使用提交按钮发出两个 POST 请求 以前我在发出 一个 POST 请求时遇到以下问题:

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

我在两个控制器上都尝试了 [EnableCors("AllowMyOrigin")] 方法。

它适用于第一个请求,但不适用于第二个请求(给出相同的错误)

这是我用于启用 CORS 的内容

 services.AddCors(options =>
            {
            options.AddPolicy("AllowMyOrigin",
             builder => builder.WithOrigins("http://127.0.0.1:5501").AllowAnyMethod().AllowAnyHeader())
             ;
            });

        }

我怎样才能使它适用于这两个请求。

【问题讨论】:

  • 你能在 Startup.cs 的 Configure 和 ConfigureServices() 中显示你的代码吗?

标签: c# asp.net-core .net-core cors asp.net-core-mvc


【解决方案1】:

您可以在 ConfigureServices 方法中使用以下代码

services.AddCors(options =>
{
            options.AddPolicy("CorsPolicy",
            builder => builder.AllowAnyOrigin()
                                .AllowAnyMethod()
                                .AllowAnyHeader()
                                .AllowCredentials());
});

并在配置方法中使用

app.UseCors("CorsPolicy");

【讨论】:

    【解决方案2】:

    我遇到了你的问题。为了解决这个问题,首先将此代码添加到 startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
         services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
         {
          builder.AllowAnyMethod()
                 .AllowAnyHeader()
                 .AllowAnyOrigin()
                 .AllowCredentials();
            }));
            services.Configure<MvcOptions>(options =>
            {
                options.Filters.Add(new CorsAuthorizationFilterFactory("MyPolicy"));
            });
      }}
    
     public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, DiagnosticListener diagnosticListenerSource, DiagnosticObserver diagnosticObserver)
     {
            app.UseCors("MyPolicy");
     }
    

    那么“Access-Control-Allow-Origin”应该添加到api发送请求头中。

    打字稿示例:

    fetch(window.appSettings.API_URL + path, {
            redirect: 'follow',
            method,
            body: data === null ? null : JSON.stringify(data),
            headers: {
                Accept: 'application/json',
                'Content-Type': 'application/json',
                'Access-Control-Allow-Origin': '*',
                Authorization: 'Bearer ' + bToken,
            },
        });
    

    出于安全考虑,您可以更改来源

    【讨论】:

      【解决方案3】:

      试试这个代码,看看它是否适合你

      public void ConfigureServices(IServiceCollection services)
      {
            services.AddCors();
            services.AddMvc();
      }
      
      public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
      {
          app.UseCors(
              options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()
          );
      
          app.UseMvc();
      }
      

      【讨论】:

        猜你喜欢
        • 2018-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-20
        • 1970-01-01
        • 1970-01-01
        • 2018-01-28
        • 2018-08-03
        相关资源
        最近更新 更多