включение CORS в .net core webAPI - PullRequest
       22

включение CORS в .net core webAPI

0 голосов
/ 22 февраля 2019

Я установил пакет NuGet Microsoft.AspNetCore.Cors 2.2.0, затем в моем ядре .net webAPI Startup.cs я сделал следующее:

public void ConfigureServices(IServiceCollection services) { 
......
services.AddCors();
}

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

    app.UseCors(options =>
    options.WithOrigins("http://localhost:52556")
    .AllowAnyMethod()
    .AllowAnyHeader());

    app.UseMvc();
}

Затем, когда я отправляю запрос от моегоугловое приложение в консоли. Я вижу эту ошибку:

Доступ к XMLHttpRequest в «http://localhost:52556/api/PaymentDetail' из источника» http://localhost:4200' заблокирован политикой CORS: Ответ на запрос предполетной проверки нене проходите проверку контроля доступа: на запрашиваемом ресурсе отсутствует заголовок «Access-Control-Allow-Origin».

Я думал, что я включил CORS, но, похоже, что-то его блокирует.Что можно сделать, чтобы решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Вы устанавливаете Origin для своего хоста asp.

Просто замените эту строку

options.WithOrigins("http://localhost:52556")

на

options.WithOrigins("http://localhost:4200")
0 голосов
/ 22 февраля 2019

Я решил ту же проблему в C # с помощью аннотаций / атрибутов,

[System.Web.Http.Cors.EnableCors(origins: "http://localhost:4200", headers: "*", methods: "*")]
public class StudentsController : ApiController{}

в MVC, используйте,

// For Action, 
[HttpGet]
[EnableCors("AllowSpecificOrigin")]
public IEnumerable<string> Get(){}
// For Controller,   
[Route("api/[controller]")]
[EnableCors("AllowSpecificOrigin")]
public class ValuesController : ControllerBase{}

в вашем случае, замените на это, если это относится к процессу с номером порта4200,

options.WithOrigins("http://localhost:4200");

или вы можете поставить No Restrictions,

app.UseCors("NoRestrictions");// To config
// To service
services.AddCors(options =>
{
  options.AddPolicy("NoRestrictions",
         builder => builder.WithOrigins("*").AllowAnyHeader().AllowAnyMethod());
});

Проверяет источник, 1) проверяет номер порта (e.g. 8080 or 8888) 2) домен и поддомен (e.g. google.com or google.net) 3) схема (e.g. http or https)

происхождение регистра,

перейти внутрь Startup.ConfigureServices и позвонить services.AddCors();

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors();
}

включить Cors сейчас, перейти Startup.Configureи звоните app.UseCors(builder => builder.WithOrigins("http://google.com"));

0 голосов
/ 22 февраля 2019

Попробуйте так.Думаю, это потому, что вы разрешаете URL-адреса только с «http://localhost:52556"». Использование «*» включит все URL-адреса, и, если вы захотите, вы можете ограничить его любым конкретным.

public void ConfigureServices(IServiceCollection services)
{
  .........................
    services.AddCors(options =>
            {
                options.AddPolicy("NoRestrictions",
                    builder => builder.WithOrigins("*").AllowAnyHeader().AllowAnyMethod());
            });;
     ...............
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IOptions<AppServerSettings> appServerSettings)
{
    ..........
    app.UseCors("NoRestrictions");
    ..........
}
...