Piranha CMS — UseManager нарушает политику CORS

#.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();
            });