using ToolHub.Services; using Microsoft.AspNetCore.Authentication.Cookies; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); // 添加HttpContext访问器 builder.Services.AddHttpContextAccessor(); // 配置FreeSql var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? "Data Source=toolhub.db"; builder.Services.AddSingleton(provider => { var freeSql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Sqlite, connectionString) .UseAutoSyncStructure(true) // 自动同步数据库结构 .Build(); return freeSql; }); // 注册服务 builder.Services.AddScoped(); builder.Services.AddScoped(); // 配置身份验证 builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.LoginPath = "/Admin/Login"; options.LogoutPath = "/Admin/Logout"; options.ExpireTimeSpan = TimeSpan.FromDays(7); }); var app = builder.Build(); // 初始化数据库和种子数据 using (var scope = app.Services.CreateScope()) { var freeSql = scope.ServiceProvider.GetRequiredService(); // 确保数据库表已创建 freeSql.CodeFirst.SyncStructure(); freeSql.CodeFirst.SyncStructure(); freeSql.CodeFirst.SyncStructure(); freeSql.CodeFirst.SyncStructure(); freeSql.CodeFirst.SyncStructure(); freeSql.CodeFirst.SyncStructure(); freeSql.CodeFirst.SyncStructure(); freeSql.CodeFirst.SyncStructure(); // 添加初始数据 await SeedDataAsync(freeSql); } // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapStaticAssets(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}") .WithStaticAssets(); app.Run(); // 数据初始化方法 static async Task SeedDataAsync(IFreeSql freeSql) { // 检查是否已有数据 var categoryCount = await freeSql.Select().CountAsync(); if (categoryCount > 0) return; // 添加分类 var categories = new List { new() { Name = "PDF工具", Description = "PDF文档处理相关工具", Icon = "fas fa-file-pdf", Color = "#dc3545", SortOrder = 1 }, new() { Name = "图片工具", Description = "图片处理和编辑工具", Icon = "fas fa-image", Color = "#165DFF", SortOrder = 2 }, new() { Name = "视频工具", Description = "视频处理和编辑工具", Icon = "fas fa-video", Color = "#FF7D00", SortOrder = 3 }, new() { Name = "文档转换", Description = "各种文档格式转换工具", Icon = "fas fa-file-alt", Color = "#52C41A", SortOrder = 4 }, new() { Name = "数据计算", Description = "数据计算和统计工具", Icon = "fas fa-calculator", Color = "#36CFC9", SortOrder = 5 }, new() { Name = "开发工具", Description = "程序开发相关工具", Icon = "fas fa-code", Color = "#722ED1", SortOrder = 6 }, new() { Name = "文本工具", Description = "文本处理和编辑工具", Icon = "fas fa-font", Color = "#13C2C2", SortOrder = 7 }, new() { Name = "生活娱乐", Description = "日常生活和娱乐工具", Icon = "fas fa-gamepad", Color = "#FA8C16", SortOrder = 8 } }; await freeSql.Insert(categories).ExecuteAffrowsAsync(); // 添加示例工具 var tools = new List { new() { Name = "PDF转Word", Description = "高效将PDF文件转换为可编辑的Word文档,保留原始格式和排版", Icon = "fas fa-file-word", Image = "https://design.gemcoder.com/staticResource/echoAiSystemImages/33769d8fd6cd6c3290700a9a1849a860.png", CategoryId = 1, IsHot = true, Rating = 4.9m, RatingCount = 1250, ViewCount = 125000, SortOrder = 1 }, new() { Name = "图片压缩", Description = "减小图片文件大小,保持高质量,支持批量处理多种图片格式", Icon = "fas fa-compress", Image = "https://design.gemcoder.com/staticResource/echoAiSystemImages/34a8fb1fdc206c992dddf5cda0318963.png", CategoryId = 2, IsHot = true, Rating = 4.8m, RatingCount = 980, ViewCount = 98000, SortOrder = 2 }, new() { Name = "证件照生成", Description = "快速制作符合各国签证和证件要求的标准证件照,支持多种尺寸", Icon = "fas fa-user-circle", Image = "https://design.gemcoder.com/staticResource/echoAiSystemImages/47b898b061a999bcbb5ee1defbdb6800.png", CategoryId = 2, IsRecommended = true, Rating = 4.7m, RatingCount = 750, ViewCount = 75000, SortOrder = 3 }, new() { Name = "在线录屏", Description = "无需安装软件,直接在浏览器中录制屏幕、摄像头和音频,支持多种格式导出", Icon = "fas fa-video", Image = "https://design.gemcoder.com/staticResource/echoAiSystemImages/930732ebbce6d0418fefe467d9f74ebc.png", CategoryId = 3, IsNew = true, Rating = 4.6m, RatingCount = 520, ViewCount = 52000, SortOrder = 4 }, new() { Name = "PDF转Excel", Description = "将PDF表格数据转换为可编辑的Excel文件", Icon = "fas fa-file-excel", CategoryId = 4, IsNew = true, Rating = 4.5m, RatingCount = 320, ViewCount = 32000, SortOrder = 5 }, new() { Name = "房贷利率计算器", Description = "计算不同贷款方式下的月供和总利息", Icon = "fas fa-calculator", CategoryId = 5, Rating = 4.6m, RatingCount = 890, ViewCount = 89000, SortOrder = 6 } }; await freeSql.Insert(tools).ExecuteAffrowsAsync(); // 添加默认管理员用户 var adminPassword = "admin123"; // 实际应用中应该使用更安全的密码 using var sha256 = System.Security.Cryptography.SHA256.Create(); var hashedBytes = sha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes(adminPassword + "ToolHub_Salt")); var hashedPassword = Convert.ToBase64String(hashedBytes); var admin = new ToolHub.Models.User { UserName = "admin", Email = "admin@toolhub.com", PasswordHash = hashedPassword, NickName = "管理员", Role = "Admin" }; await freeSql.Insert(admin).ExecuteAffrowsAsync(); }