Я не уверен, что мне не хватает, но не могу заставить мою политику CORS работать с .NET Core 3.1 и Angular 8 на стороне клиента.
Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
// ...
// Add CORS policy
services.AddCors(options =>
{
options.AddPolicy("foo",
builder =>
{
// Not a permanent solution, but just trying to isolate the problem
builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
});
});
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
// Use the CORS policy
app.UseCors("foo");
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Сообщение об ошибке на стороне клиента:
Access to XMLHttpRequest at 'https://localhost:8082/api/auth/' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
ОБНОВИТЬ:
Хотя я была настройка CORS неправильно (и общепринятый ответ ниже и в самом деле помочь с этим) корень вопроса не был связан. Для дополнительного контекста, приложение работало совершенно нормально при запуске API и приложения Angular с использованием CLI - у меня возникла эта проблема только после их развертывания на веб-сервере.
«Фактическая» проблема закончилась тем , что был связан с соединением SQL, который я только обнаружил после добавления плоско-файл регистрации ошибок в API и запустить трассировку SQL Server , чтобы найти , что приложение не может подключиться к SQL на всех.
Я обычно ожидал бы, что это просто вернет 500, и я понял бы проблему в течение 10 секунд - однако неправильная конфигурация CORS означала, что 500 фактически никогда не возвращался, потому что промежуточное программное обеспечение CORS сначала отказало. Это было очень неприятно, если не сказать больше! , Однако я хочу добавить, что здесь, на случай, если другие окажутся в такой ситуации, как я «гоняюсь за неправильным кроликом», если хотите. После исправления конфигурации CORS я понял, что проблема не связана с CORS.
TL; DR; - Иногда «не-CORS» .NET-ошибки на стороне сервера могут быть возвращены как ошибки CORS, если политики CORS не установлены правильно
Ссылки:
https://medium.com/swlh/cors-headers-with-dot-net-core-3-5c9dfc664785
app.UseCors("foo");
доapp.UseHttpsRedirection();
Ответы:
сначала
app.UseRouting();
тогдаapp.UseCors("foo");
Измените свой
Configure
метод следующим образом:Это сработало для меня!
источник
ConfigureServices
кодом OP решило мою проблему. Большое спасибо!Веб API использует
app.UseHttpsRedirection()
; которые вызываютCORS
проблему, если запрос клиента неhttps
основан. Таким образом, чтобы использовать его сhttp
клиентом, нам нужно закомментировать или удалить эту строку.Эта проблема не с
CORS
, HTTPS вызывает эту проблему, но брошенная ошибка говорит, что с CORS.источник
Попробуйте это утилиту
https://www.nuget.org/packages/Microsoft.AspNetCore.Cors/ С помощью этого вы можете включить / отключить cors в вашем основном приложении .net
источник
Поскольку вы используете localhost as
http://localhost:4200
, попробуйте установить его в своей конфигурации:И
Configure
метод:источник
При добавлении сервиса Cors обязательно включите
.SetIsOriginAllowed((host) => true)
после.WithOrigins("http://localhost:4200")
источник