Проблема CORS в .NET 6 с IONIC / Angular

#angular #ionic-framework #asp.net-core-webapi

Вопрос:

Что ж, даже включив все возможные CORS для серверной части, которая находится в .NET 6, я не могу вызывать конечные точки через службу IONIC / Angular.

Мой код в серверной части (все работает на postman, как и ожидалось):

  • Некоторые методы контроллеров:
 [HttpGet("ano/{year:int}")]
public ActionResult<Result> GetByYear(int year){
    try{
        if (year >= 2015 amp;amp; year <= 2021){
            var result = _service.GetByYear(year);
            return Ok(result);
        }
        return BadRequest("The year must be between 2015 to 2021.");
    }catch (Exception ex){
        return Problem(ex.Message);
    }
}

[HttpGet("cidade/nomes")]
public ActionResult<IEnumerable<string>> GetCityNames(){
    try{
        return Ok(_service.GetAllCityNames());
    }catch (Exception ex){
        return Problem(ex.Message);
    }
}

// My startup class:
public void ConfigureServices(IServiceCollection services){
    services.AddSingleton<IXlsxAcessor,XlsxAcessor>();            
    services.AddControllers();           
    services.AddSwaggerGen(c => {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "Domestic.Violence.API", Version = "v1" });
});

services.AddCors(option => {
    option.AddDefaultPolicy(builder =>{
          builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod();
        });
    });
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env){
    if (env.IsDevelopment()){
        app.UseDeveloperExceptionPage();
        app.UseSwagger();
        app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Domestic.Violence.API v1"));
    }
    app.UseHttpsRedirection();            
    app.UseRouting();
    app.UseCors();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>{
        endpoints.MapControllers();
    });
}
 

Я следил за каждым руководством, документацией и получил то же самое:

Изображение ошибки

  • Мой сервис в ionic / angular:
 export class ApiService {
    constructor(private httpClient: HttpClient) { }
    private url: string = "http://localhost:5000/api/violence-statistics";

    public GetAllCityNames() : Observable<string[]>{
           return this.httpClient.get<string[]>(this.url   "/cidade/nomes");
}}
 

Я много искал, я даже сделал проект таким же, и он работает. Я не знаю, чего мне здесь не хватает.

Комментарии:

1. как выглядел заголовок ответа. используйте инструмент, подобный Postman.

2. Я мало о чем знаю . net но CORS необходимо обрабатывать как на стороне сервера, так и на стороне клиента. Для сервера Symfony мы обрабатываем CORS с помощью github.com/nelmio/NelmioCorsBundle Можете ли вы найти эквивалент для .NET?

Ответ №1:

  1. Включить cors с расширением (для firefox: https://addons.mozilla.org/en-US/firefox/addon/cors-everywhere/?utm_source=addons.mozilla.orgamp;utm_medium=referralamp;utm_content=search) Вы также можете попробовать использовать Chrome, но поскольку Chrome более рестайлинговый, попробуйте сначала в Firefox. Если это решение работает, значит, ваша проблема связана с серверной частью. Вы должны включить там CROS.
  2. Если расширение не работает, оно выдаст вам точную ошибку о том, что происходит.