CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Angular, Net Core - PullRequest
0 голосов
/ 21 января 2020

Я использую Angular, подключаясь к Net Core web API. Часть angular размещена на firebase, а ядро ​​net web api размещено на сервере IIS. Я использую https для обоих.

При попытке сделать запрос я получаю сообщение об ошибке «Access-Control-Allow-Origin».

В моем ConfigureServices () у меня есть

services.AddCors(options =>
        {
            // this defines a CORS policy called "default"
            options.AddPolicy("default", policy =>
            {
                policy.AllowAnyOrigin()
                    .AllowAnyHeader()
                    .AllowAnyMethod();
            });
        });

В моем Configure () у меня есть app.UseCors ("default")

app.UseCors("default");

В моем контроллере у меня есть

[HttpGet]
    [Authorize]
    [EnableCors("default")]
    //GET : /api/UserProfile
    public async Task<Object> GetUserProfile()
    {
        string userId = User.Claims.First(c => c.Type == "UserID").Value;
        var user = await _userManager.FindByIdAsync(userId);
        return new
        {
            FullName = user.FullName,
            Email = user.Email,
            UserName = user.UserName
        };
    }

My angular запрос выглядит следующим образом:

getUserProfile() {
        const httpOptions = {
          headers: new HttpHeaders({
            'Authorization': `Bearer ${localStorage.getItem('token')}`
          })
        };
        return this.http.get(this.BaseURI + '/UserProfile', httpOptions);
      }

Может кто-нибудь объяснить, почему я получаю эту ошибку CORS? Мои функции add Mvc () и использования Mvc () пишутся после addCors () и useCors ()

Ответы [ 5 ]

1 голос
/ 22 января 2020

Попробуйте это:

В Startup.cs, внутри метода "ConfigureServices"

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

А затем внутри метода "Configure", напишите в top app. Использование Mvc () ;

app.UseCors("default");

А затем в Program.cs

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
               .UseStartup<Startup>()
               .UseUrls("put your client side link here");
               //for example: "http://localhost:4200"

И затем добавьте эти коды в верхней части контроллера:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Produces("application/json")]

И затем измените свое действие («Я имею в виду GetUserProfile ()») вот так:

[HttpGet]
public async Task<IActionResult> GetUserProfile()
{
    var userId = user.Claims.First(c => c.Type.equals("UserID")).Value;
    var user = await _userManager.FindByIdAsync(userId);
    return Ok(new
    {
        FullName = user.FullName,
        Email = user.Email,
        UserName = user.UserName
    });
}

И около angular кода попробуйте это:

getUserProfile() {
    const TOKEN = localStorage.getItem("token");
    const httpOptions = {
      headers: new HttpHeaders({
          "Authorization": "Bearer " + TOKEN,
          "Content-Type": "application/json"
      })
    };
    return this.http.get(this.BaseURI + '/UserProfile', httpOptions);
  }
1 голос
/ 22 января 2020

Попробуйте использовать следующий код:

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

и

app.UseCors("CorsPolicy");

Примечание: не используйте app.UseCors () после app.Use Mvc ()

Для более подробной информации см. Ссылку ниже:

Включить запросы между источниками (CORS) в ASP. NET Core

Если вы по-прежнему сталкиваетесь с ошибкой, попробуйте включить исключения / ведение журнала и определить причину ошибки в вашем веб-API.

asp net core - Нет 'Access- Заголовок Control-Allow-Origin 'присутствует на запрашиваемом ресурсе

1 голос
/ 22 января 2020

Будет отображаться ошибка политики CORS, если маршрут не установлен. Попробуйте это:

[Authorize]
[EnableCors("default")]
//GET : /api/UserProfile
[HttpGet("GetUserProfile")]
public async Task<Object> GetUserProfile()
{
    string userId = User.Claims.First(c => c.Type == "UserID").Value;
    var user = await _userManager.FindByIdAsync(userId);
    return new
    {
        FullName = user.FullName,
        Email = user.Email,
        UserName = user.UserName
    };
}
1 голос
/ 21 января 2020

Попробуйте это:

В Startup.cs, внутри ConfigureServices

services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
        {
            builder.AllowAnyOrigin()
                   .AllowAnyMethod()
                   .AllowAnyHeader();
        }));

И внутри Configure:

app.UseCors("MyPolicy");
0 голосов
/ 22 января 2020

Я ценю все ответы, однако я испробовал все решения, и ни одно из них не сработало. Я не уверен, почему, но это так.

Что сработало, так это установил заголовки ответа в моем IIS. Добавление следующего к заголовкам ответов Allow-Access-Control-Origin * исправило мою проблему.

Мне также пришлось создать имя входа IIS для моей базы данных SQL, но это еще одна проблема.

Спасибо всем за ваши предложения

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