#.net-core #cors #asp.net-core-3.1 #piranha-cms
#.net-core #cors #asp.net-core-3.1 #piranha-cms
Вопрос:
Я нахожусь в процессе интеграции Piranha CMS (v8.4) в существующий проект ASP .NET Core 3.1. Я заставил Piranha работать, но я получаю исключение, указывающее, что CORS настроен неправильно.
Мне удалось отследить источник проблемы вплоть до конфигурации промежуточного программного обеспечения Piranha. Проблема возникает из-за строки options.UseManager()
, и когда options.UseManager()
строка закомментирована, промежуточное программное обеспечение CORS функционирует должным образом.
app.UsePiranha(options =>
{
options.UseManager();
options.UseTinyMCE();
options.UseIdentity();
});
InvalidOperationException: Endpoint contains CORS metadata, but a middleware was not found that supports CORS. Configure your application startup by adding app.UseCors() inside the call to Configure(..) in the application startup code. The call to app.UseAuthorization() must appear between app.UseRouting() and app.UseEndpoints(...).
Моя политика CORS настроена следующим образом. Вызов до или после UsePiranha
не имеет значения:
// global cors policy
app.UseCors(x => x
.AllowAnyMethod()
.AllowAnyHeader()
.SetIsOriginAllowed(origin => env.IsDevelopment()) //any origin in dev
.AllowCredentials());
`
Ответ №1:
Проблема в том, что вызов UseManager
вызовов UseRouting
. За исключением, UseCors необходимо настроить РАНЬШЕ UseRouting
. Решение заключается в настройке CORS между вызовами UseIdentity
и UseManager
.
app.UsePiranha(options =>
{
options.UseTinyMCE();
options.UseIdentity();
app.UseCors(x => x
.AllowAnyMethod()
.AllowAnyHeader()
.SetIsOriginAllowed(origin => env.IsDevelopment()) //any origin in dev
.AllowCredentials());
options.UseManager();
});