Ошибка CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin» - PullRequest
1 голос
/ 02 марта 2020

Я использую. Net Core 3. Я запрограммировал API, вызываемый SPA, размещенным в. Net Core Web Project. Для одного действия POST в API я получаю ошибку CORS в Chrome, а также Firefox, в то время как для другого действия POST в том же контроллере API все работает нормально.

Ошибка, которую я get is

Access to fetch at 'https://subdomain1.domain1.com:50003/api/v1/projects/project' from origin 
'https://subdomain2.domain2.com:50002' has been blocked by CORS policy: 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
If an opaque response serves your needs, set the request's mode to 
'no-cors' to fetch the resource with CORS disabled.

В API, в классе запуска у меня есть следующее

readonly string MyAllowSpecificOrigins = "AllowOrigin";
public void ConfigureServices(IServiceCollection services)
{
     CorsPolicyBuilder builder = new CorsPolicyBuilder();
     CorsPolicy policy = builder.WithOrigins("https://subdomain2.domain2.com:50002")
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials()
                .Build();
     services.AddCors(options =>
     {
          options.AddPolicy(MyAllowSpecificOrigins, policy);
     });

     services.AddControllers();

     services
     .AddAuthentication("Bearer")
     .AddJwtBearer(jwtOptions => {
          jwtOptions.Authority = "https://subdomain.domain.com:50001";
          jwtOptions.Audience = "portal-api";
          jwtOptions.RequireHttpsMetadata = false;
     });
}

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

     var provider = new FileExtensionContentTypeProvider();
     provider.Mappings[".hrc"] = "application/octet-stream";
     provider.Mappings[".obj"] = "application/octet-stream";

     app.UseHttpsRedirection();

     app.UseRouting();

     app.UseCors(MyAllowSpecificOrigins);

     app.UseAuthentication();
     app.UseAuthorization();

     app.UseEndpoints(endpoints =>
     {
          endpoints.MapControllers().RequireCors(MyAllowSpecificOrigins);
     });
     app.UseMvc();
}

В контроллере API у меня есть действие POST, для которого я не получаю никаких Ошибка CORS

[HttpPost]
[Route("[action]")]
[ActionName("thumbnail")]
public async Task<IActionResult> thumbnail([FromBody]dataDTO model)
{
     .
     .
     .
}

В том же API у меня есть другое действие POST, для которого браузер выдает вышеупомянутую ошибку CORS

[HttpPost]
[Route("project")]
[ActionName("project")]
public async Task<IActionResult> projectAdd([FromBody]projectDTO project)
{
     .
     .
     .
}

Я уже пытался переместить app.UseCors(MyAllowSpecificOrigins); на вершину функции configure в startup.cs. Это не помогло.

Я также пытался переместить оператор app.UseCors(MyAllowSpecificOrigins); и изменить его порядок в configure без разницы.

В firefox, я также подтвердил, что там заголовок Origin в запросе к действию, для которого мы получаем ошибку CORS.

...