Доступ к XMLHttpRequest в '' from origin '' был заблокирован политикой CORS: в запрошенном запросе отсутствует заголовок 'Access-Control-Allow-Origin'. - PullRequest
0 голосов
/ 14 июля 2020

Я разработал Asp. Net Core 3.1 API и развернул на сервере через IIS, он работает должным образом, если я отправляю запрос GET / POST из почтальона или браузера, но код ниже выдает ошибку.

$.ajax({
   type: 'GET',
   crossDomain: true,
   dataType: 'json',
   url: 'myUrl',
   success: function(jsondata){
   }
})

Ошибка:

Доступ к XMLHttpRequest в 'http://server: 8080 / API / GetMethod? Currency = INR' from origin 'http://localhost: 63765 'был заблокирован политикой CORS: на запрошенном ресурсе отсутствует заголовок' Access-Control-Allow-Origin '.

Я отключил CORS в своем приложении, используя приведенный ниже код C# код:

[DisableCors]
[Route("[controller]")]
[ApiController]
[AllowAnonymous]
public class APIController : ControllerBase
{

startup.cs

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddLog4Net();

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

        

app.UseHttpsRedirection();

app.UseRouting();

app.UseCors();

app.UseAuthorization();

Итак, я попытался отключить CORS на уровне контроллера, я также попробовал jsonp вместо JSON, все равно выдает ту же ошибку.

У меня два вопроса.

  1. Это проблема на стороне клиента или на стороне сервера?
  2. Как исправить ошибку ?

Примечание: Я могу отправлять запросы GET из браузера и почтальона, но с этим cl Код ientside, у меня проблема, связанная с CORS.

Ответы [ 2 ]

4 голосов
/ 14 июля 2020

1. Это проблема на стороне сервера. Поскольку сервер блокирует источник, который делает запрос.

2. У меня раньше была аналогичная проблема в функции. Вместо использования [DisableCors] и [AllowAnonymous] вы можете выполнить некоторую конфигурацию в startup.cs

подробности: https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-3.1

AllowAnyOrigin: Разрешает запросы CORS из всех источников с любой схемой (http или https). AllowAnyOrigin небезопасен, потому что любой веб-сайт может делать запросы к приложению из разных источников.

рекомендуемое решение (если это не сработает, вы можете использовать AllowAnyOrigin):

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy(MyAllowSpecificOrigins,
                                builder =>
                                {
                                    builder.WithOrigins("http://example.com",
                                                        "http://www.contoso.com")
                                                        .AllowAnyHeader()
                                                        .AllowAnyMethod();
                                });
        });

        services.AddControllers();
    }  
1 голос
/ 16 июля 2020

Таким образом, проблема возникла из-за того, что я использовал [EnableCors("MyPolicy")] на контроллере, но добавил [DisableCors] в метод. поэтому он может перезаписать политику CORS. Поэтому я удалил [DisableCors] из метода, и он начал работать, как ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...