/
ArtSerg
/
IntegrationProject
Обзор
Документация
Войти
/
ArtSerg
/
IntegrationProject
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
Integration1/Program.cs
111 строк
3 KB
ArtSerg
Add cors
10 дек 2025, 19:16
10 дек 2025, 19:16
b6d3673
Код
Авторство
О чём код?
using Integration1.Data; using Integration1.Services; using Integration1.Swagger; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using Microsoft.OpenApi.Models; using System.Text; var builder = WebApplication.CreateBuilder(args); builder.Services.AddDbContext<AppDbContext>(opt => opt.UseSqlite("Data Source=tasks.db")); builder.Services.AddScoped<JwtService>(); builder.Services.AddControllers(); builder.Services.AddMemoryCache(); builder.Services.AddCors(options => { options.AddDefaultPolicy(policy => { policy.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Task API v1", Version = "v1" }); c.SwaggerDoc("v2", new OpenApiInfo { Title = "Task API v2", Version = "v2" }); c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { In = ParameterLocation.Header, Description = "Input JWT", Name = "Authorization", Type = SecuritySchemeType.Http, Scheme = "bearer", BearerFormat = "JWT" }); c.AddSecurityDefinition("InternalApiKey", new OpenApiSecurityScheme { In = ParameterLocation.Header, Description = "X-Internal-ApiKey", Name = "X-Internal-ApiKey", Type = SecuritySchemeType.ApiKey }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, new string[] {} } }); c.OperationFilter<InternalApiKeyOperationFilter>(); c.OperationFilter<IdempotencyHeaderOperationFilter>(); }); builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(opt => { opt.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = false, ValidateAudience = false, ValidateLifetime = true, ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]!)) }; }); var app = builder.Build(); app.UseMiddleware<RateLimitMiddleware>(); app.UseMiddleware<IdempotencyMiddleware>(); app.UseCors(); app.UseAuthentication(); app.UseAuthorization(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "v1"); c.SwaggerEndpoint("/swagger/v2/swagger.json", "v2"); }); app.MapControllers(); using (var scope = app.Services.CreateScope()) { var db = scope.ServiceProvider.GetRequiredService<AppDbContext>(); db.Database.Migrate(); } app.Run();