Добавить политику CORS только для конечных точек Swagger - PullRequest
1 голос
/ 14 февраля 2020

Я бы хотел добавить сердечники к сваггеру. 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");
            });

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

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

1 Ответ

0 голосов
/ 14 февраля 2020

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

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

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

...