using Blahblah.FlowerStory.Server.Data; using Microsoft.EntityFrameworkCore; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; namespace Blahblah.FlowerStory.Server; /// <inheritdoc/> public class Program { /// <inheritdoc/> public const string ProjectName = "Flower Story"; /// <inheritdoc/> public const string Version = "0.7.731"; /// <inheritdoc/> public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(options => { options.OperationFilter<SwaggerHttpHeaderOperation>(); var scheme = new OpenApiSecurityScheme { Description = "ÊÚȨͷ¡£ ʾÀý£º \"RF4mfoUur0vHtWzHwD42ka0FhIfGaPnBxoQgrXOYEDg=\"", Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Authorization" }, Scheme = "oauth2", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey }; options.AddSecurityDefinition("Authorization", scheme); options.AddSecurityRequirement(new OpenApiSecurityRequirement { [scheme] = Array.Empty<string>() }); options.SwaggerDoc(Version, new OpenApiInfo { Title = ProjectName, Version = Version, Description = "<p>»¨Ê¼Ç¼£¬ÌùÐĵİïÄú¼Ç¼»¨Ô°ÖеĵãµãµÎµÎ¡£</p><p><b>API Îĵµ</b></p>" }); options.IncludeXmlComments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Server.xml"), true); }); builder.Services.AddDbContext<FlowerDatabase>(options => options.UseSqlite("DataSource=flower.db;Cache=Shared")); builder.Services.AddScoped<SwaggerGenerator>(); var app = builder.Build(); // Configure the HTTP request pipeline. //if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(options => { options.SwaggerEndpoint($"/swagger/{Version}/swagger.json", ProjectName); }); } app.UseAuthorization(); app.UseStaticFiles(); app.MapControllers(); app.Run(); } } /// <inheritdoc/> public class SwaggerHttpHeaderOperation : IOperationFilter { /// <inheritdoc/> public void Apply(OpenApiOperation operation, OperationFilterContext context) { switch (context.ApiDescription.RelativePath) { case "api/user/auth": operation.Parameters.Add(new OpenApiParameter { Name = "X-ClientAgent", Description = "¿Í»§¶Ë´úÀí", In = ParameterLocation.Header, Required = false, Schema = new OpenApiSchema { Type = "string" } }); operation.Parameters.Add(new OpenApiParameter { Name = "X-DeviceId", Description = "É豸 id", In = ParameterLocation.Header, Required = false, Schema = new OpenApiSchema { Type = "string" } }); break; } } }