/
Lexus_666
/
Pir_API
Обзор
Документация
Войти
/
Lexus_666
/
Pir_API
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Program.cs
105 строк
3 KB
Lexus_666
Lab 2 done
20 окт 2025, 05:24
20 окт 2025, 05:24
1680046
Код
Авторство
О чём код?
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ApiExplorer; using Microsoft.OpenApi.Models; using Pir_API.Middleware; using Pir_API.Interfaces; using Pir_API.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.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "ApiKey" } }, Array.Empty<string>() } }); options.AddSecurityDefinition("ApiKey", new OpenApiSecurityScheme { Description = "Enter API key", Name = "X-API-Key", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey, Scheme = "ApiKey" }); options.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "API v1", Description = "API - ������ ���������� ��� �����������" }); options.SwaggerDoc("v2", new OpenApiInfo { Version = "v2", Title = "API v2", Description = "API - ������ ���������� ��� �����������. �������� �������� ������� �� �����" }); }); builder.Services.AddSingleton<IWorkerService, WorkerService>(); builder.Services.AddSingleton<IApiKeyService, ApiKeyService>(); builder.Services.AddSingleton<IIdempotencyService, IdempotencyService>(); builder.Services.AddSingleton<IStatisticsService, StatisticsService>(); builder.Services.AddSingleton<IInternalApiClient, InternalApiClient>(); var app = builder.Build(); var apiVersionDescriptionProvider = app.Services.GetRequiredService<IApiVersionDescriptionProvider>(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(options => { foreach (var description in apiVersionDescriptionProvider.ApiVersionDescriptions) { options.SwaggerEndpoint( $"/swagger/{description.GroupName}/swagger.json", $"Worker API {description.GroupName.ToUpperInvariant()}"); } }); } app.UseMiddleware<RateLimitingMiddleware>(); app.UseMiddleware<ApiKeyMiddleware>(); app.UseMiddleware<IdempotencyMiddleware>(); app.UseMiddleware<StatisticsLoggingMiddleware>(); app.UseAuthorization(); app.MapControllers(); app.Run();