#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:
- Включить 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.
- Если расширение не работает, оно выдаст вам точную ошибку о том, что происходит.