/
Lexus_666
/
PIR_Lab_3
Обзор
Документация
Войти
/
Lexus_666
/
PIR_Lab_3
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
PIR_Lab_1/Program.cs
120 строк
3 KB
Lexus_666
CORS setup
24 дек 2025, 00:32
24 дек 2025, 00:32
81bee9f
Код
Авторство
О чём код?
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ApiExplorer; using Microsoft.OpenApi.Models; using PIR_Lab_1.Interfaces; using PIR_Lab_1.Middleware; using PIR_Lab_1.Services; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddLogging(); builder.Services.AddHttpClient<IInternalApiClient, InternalApiClient>(client => { client.Timeout = TimeSpan.FromSeconds(30); }); builder.Services.AddApiVersioning(options => { options.DefaultApiVersion = new ApiVersion(1, 0); options.AssumeDefaultVersionWhenUnspecified = true; options.ReportApiVersions = true; }); builder.Services.AddVersionedApiExplorer(options => { options.GroupNameFormat = "'v'VVV"; options.SubstituteApiVersionInUrl = true; }); builder.Services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "My API v1", Description = "Version 1 of API" }); options.SwaggerDoc("v2", new OpenApiInfo { Version = "v2", Title = "My API v2", Description = "Version 2 of API" }); options.AddSecurityDefinition("ApiKey", new OpenApiSecurityScheme { Description = "Enter your API key", Name = "X-API-Key", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey, Scheme = "ApiKey" }); options.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "ApiKey" } }, Array.Empty<string>() } }); }); builder.Services.AddSingleton<ITaskService, TaskService>(); builder.Services.AddSingleton<IUserService, UserService>(); builder.Services.AddSingleton<IApiKeyService, ApiKeyService>(); builder.Services.AddSingleton<IIdempotencyService, IdempotencyService>(); builder.Services.AddSingleton<IStatisticsService, StatisticsService>(); builder.Services.AddSingleton<IInternalApiClient, InternalApiClient>(); builder.Services.AddCors(options => options.AddPolicy( "ApiPolicy", b => b .AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod())); var app = builder.Build(); var apiVersionDescriptionProvider = app.Services.GetRequiredService<IApiVersionDescriptionProvider>(); app.UseCors("ApiPolicy"); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(options => { foreach (var description in apiVersionDescriptionProvider.ApiVersionDescriptions) { options.SwaggerEndpoint( $"/swagger/{description.GroupName}/swagger.json", $"My API {description.GroupName.ToUpperInvariant()}"); } }); } app.UseRouting(); app.UseMiddleware<RateLimitingMiddleware>(); app.UseMiddleware<StatisticsLoggingMiddleware>(); app.UseMiddleware<IdempotencyMiddleware>(); app.UseMiddleware<ApiKeyMiddleware>(); // app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();