Добавить политику CORS только для конечных точек Swagger

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

            services.AddCors(options => options.AddPolicy("SwaggerCorsPolicy",
                builder =>
                {
                    builder.AllowAnyMethod().AllowAnyHeader()
                        .AllowAnyOrigin()
                        .AllowAnyMethod()
                        .AllowAnyHeader();
                }));

вместе с

app.UseCors("SwaggerCorsPolicy");

С этим я могу вызвать /swagger/v1/swagger.json из другого порта, так что я знаю, что он работает.

Я хотел бы добавить cors только к конечной точке /swagger/v1/swagger.json.

Я пытался использовать MapGet в app.UseEndpoints, но безуспешно. Вот что я пробовал

            app.UseSwagger();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.MapGet("/swagger/v1/swagger.json", async context => context.Response.WriteAsync("echo"))
                    .RequireCors("SwaggerCorsPolicy");
            });

Я работаю с проблемами, когда я создаю swagger.json из приложения и запускаю ReDoc в контейнере, передавая uri локального хоста swagger.json. Это работает, когда cors включен глобально, но не когда я пытаюсь включить его только для swagger.json.

Я использую .net core 3 и openapi 3.


person Rachelle    schedule 14.02.2020    source источник
comment
Вы нашли что-нибудь? Я также нашел, как включить cors только для всего приложения, но не только для swagger.json. Включение cors для всего API, если оно вам не нужно, является нарушением безопасности.   -  person Cyril Durand    schedule 06.04.2021
comment
также опубликовано здесь github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/2078   -  person Cyril Durand    schedule 06.04.2021


Ответы (1)


Вы можете указать правило CORS на основе методов контроллера, подробнее об этом читайте здесь: https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-3.1.#enable-cors-with-attributes

Определив политику, вы можете прикрепить ее к отдельным методам. Хотя я не уверен, зачем вам нужны специальные политики CORS для Swagger. Swagger — это просто пользовательский интерфейс для настроенных вами методов API.

Я не предвижу, чтобы кто-то пытался вытащить ваш Swagger из другого источника. Чтобы было ясно, вы не можете просто установить политики CORS для методов API, когда вы находитесь в Swagger. Swagger — это просто интерфейсный инструмент для API.

person Blake Connally    schedule 14.02.2020
comment
Я не использую swaggerUI. Я использую Redoc и передаю файл /swagger/v1/swagger.json. Я сталкиваюсь с проблемой CORS, когда запускаю ReDoc для пользовательского интерфейса в контейнере, который работает через порт, отличный от API. Я передаю uri документации /swagger/v1/swagger.json в Redoc. Когда я включаю CORS глобально для всех конечных точек, я не получаю ошибку CORS. Я хочу включить его только для /swagger/v1/swagger.json. Предоставленная вами документация - это то, как я добрался до исходной реализации вопроса. К сожалению, это не работает так, как реализовано выше. - person Rachelle; 15.02.2020