/// <summary> /// 获取Token /// </summary> /// <param name="AppId">分配的应用ID</param> /// <param name="AppKey">分配的应用密钥</param> /// <returns></returns> public static ActionResultVM GetToken(string AppId, string AppKey) { var vm = new ActionResultVM(); try { using var db = new SQLiteConnection(SQLiteConn); db.CreateTable <SysKey>(); var sk = db.Table <SysKey>().FirstOrDefault(x => x.SkAppId == AppId && x.SkAppKey == AppKey); if (sk != null) { sk.SkToken = Core.CalcTo.MD5(Core.UniqueTo.LongId().ToString()); sk.SkTokenExpireTime = DateTime.Now.AddMinutes(GlobalTo.GetValue <int>("Safe:TokenExpired")); int num = db.Update(sk); vm.Data = sk; vm.Set(num > 0); } else { vm.Set(ARTag.unauthorized); } } catch (Exception ex) { vm.Set(ex); } return(vm); }
/// <summary> /// 只读(1分钟后生效,为初始化数据预留时间) /// </summary> public static void IsReadOnly() { if (GlobalTo.GetValue <bool>("ReadOnly") && Process.GetCurrentProcess().StartTime.AddMinutes(1) < DateTime.Now) { throw new Exception("The database is read-only"); } }
/// <summary> /// 链接 /// </summary> /// <param name="path"></param> /// <returns></returns> public static string AutoLink(string path = "") { var isbh = Core.CacheTo.Get(GlobalTo.GetValue("Common:BuildHtmlKey")) as bool? ?? false; var hp = isbh ? "" : "/home"; return(hp + path); }
/// <summary> /// 获取Token /// </summary> /// <param name="AppId">分配的应用ID</param> /// <param name="AppKey">分配的应用密钥</param> /// <returns></returns> public static ActionResultVM GetToken(string AppId, string AppKey) { var vm = new ActionResultVM(); try { using var db = new SQLiteConnection(SQLiteConn); var sk = db.Table <SysApp>().FirstOrDefault(x => x.AppId == AppId && x.AppKey == AppKey); if (sk != null) { sk.Token = NewToken(); sk.TokenExpireTime = DateTime.Now.AddMinutes(GlobalTo.GetValue <int>("Safe:TokenExpired")); int num = db.Update(sk); vm.Data = new { sk.Token, sk.TokenExpireTime }; vm.Set(num > 0); } else { vm.Set(ARTag.unauthorized); } } catch (Exception ex) { vm.Set(ex); } return(vm); }
public string AboutServerStatus() { string url = GlobalTo.GetValue("ServiceApi:ServiceInfo"); var result = Core.HttpTo.Get(url); return(result); }
/// <summary> /// 配置连接字符串 /// </summary> /// <param name="optionsBuilder"></param> protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { switch (TDB) { case TypeDB.MySQL: optionsBuilder.UseMySql(GlobalTo.GetValue("ConnectionStrings:MySQLConn")); break; case TypeDB.SQLite: optionsBuilder.UseSqlite(GlobalTo.GetValue("ConnectionStrings:SQLiteConn")); break; case TypeDB.InMemory: optionsBuilder.UseInMemoryDatabase(GlobalTo.GetValue("ConnectionStrings:InMemoryConn")); break; case TypeDB.SQLServer: optionsBuilder.UseSqlServer(GlobalTo.GetValue("ConnectionStrings:SQLServerConn"), options => { //启用 row_number 分页 (兼容2005、2008) //options.UseRowNumberForPaging(); }); break; case TypeDB.PostgreSQL: optionsBuilder.UseNpgsql(GlobalTo.GetValue("ConnectionStrings:PostgreSQLConn")); break; } //注册日志(修改日志等级为Information,可查看执行的SQL语句) optionsBuilder.UseLoggerFactory(LoggerFactory); } }
public ActionResultVM GetAppList(int pageNumber = 1, int pageSize = 20, string password = "******") { var vm = new ActionResultVM(); try { if (GlobalTo.GetValue <bool>("Safe:IsDev")) { if (string.IsNullOrWhiteSpace(password) || password != GlobalTo.GetValue("Safe:CreateAppPassword")) { vm.Set(ARTag.unauthorized); vm.Msg = "密码错误"; } else { vm = FileServerService.GetAppList(pageNumber, pageSize); } } else { vm.Set(ARTag.refuse); } } catch (Exception ex) { vm.Set(ex); Core.ConsoleTo.Log(ex); } return(vm); }
/// <summary> /// 发送邮件 /// </summary> /// <param name="ToMail">送达邮件地址</param> /// <param name="Title">标题</param> /// <param name="Content">内容</param> /// <returns></returns> public static ActionResultVM Send(string ToMail, string Title, string Content) { var vm = new ActionResultVM(); try { var message = new MimeMessage(); message.From.Add(new MailboxAddress(GlobalTo.GetValue("MailKit:FromAddress"))); message.To.Add(new MailboxAddress(ToMail)); message.Subject = Title; message.Body = new BodyBuilder() { HtmlBody = Content }.ToMessageBody(); using var client = new SmtpClient(); client.ServerCertificateValidationCallback = (s, c, h, e) => true; client.Connect(GlobalTo.GetValue("MailKit:Host"), GlobalTo.GetValue <int>("MailKit:Port"), true); client.Authenticate(GlobalTo.GetValue("MailKit:Auth:UserName"), GlobalTo.GetValue("MailKit:Auth:Password")); client.Send(message); client.Disconnect(true); vm.Set(ARTag.success); } catch (Exception ex) { vm.Set(ex); } return(vm); }
public void OnActionExecuting(ActionExecutingContext context) { var an = GlobalTo.GetValue("AdminName"); bool isv; //cookie 授权已登录 if (context.HttpContext.User.Identity.IsAuthenticated) { var uinfo = Application.CommonService.GetLoginUserInfo(context.HttpContext); isv = uinfo.UserName == an; } else { var token = context.HttpContext.Request.Headers["Authorization"].ToString(); var mo = Application.CommonService.TokenValid(token); isv = mo?.UserName == an; } if (!isv) { context.Result = new ContentResult() { Content = "unauthorized", StatusCode = 401 }; } }
public ActionResultVM GetToken(string AppId, string AppKey) { var vm = new ActionResultVM(); try { if (string.IsNullOrWhiteSpace(AppId) || string.IsNullOrWhiteSpace(AppKey)) { vm.Set(ARTag.lack); vm.Msg = "参数缺失"; } else { if (!(Core.CacheTo.Get(AppKey) is ActionResultVM cvm)) { vm = FileServerService.GetToken(AppId, AppKey); if (vm.Code == 200) { //Token缓存 Core.CacheTo.Set(AppKey, vm, GlobalTo.GetValue <int>("Safe:TokenCache"), false); } } else { vm = cvm; } }
public ActionResultVM CreateApp(string password) { var vm = new ActionResultVM(); try { if (GlobalTo.GetValue <bool>("Safe:IsDev")) { if (!string.IsNullOrWhiteSpace(password) && password == GlobalTo.GetValue("Safe:CreateAppPassword")) { vm = FileServerService.CreateApp(); } else { vm.Set(ARTag.unauthorized); vm.Msg = "密码错误"; } } else { vm.Set(ARTag.refuse); } } catch (Exception ex) { vm.Set(ex); Core.ConsoleTo.Log(ex); } return(vm); }
public SharedResultVM UpdateUserPhoto(string type, string source) { var vm = new SharedResultVM(); try { vm = Apps.LoginService.CompleteInfoValid(HttpContext); if (vm.Code == 200) { var uinfo = Apps.LoginService.Get(HttpContext); //物理根路径 var prp = GlobalTo.GetValue("StaticResource:PhysicalRootPath").Replace("~", GlobalTo.ContentRootPath); var ppath = PathTo.Combine(prp, GlobalTo.GetValue("StaticResource:AvatarPath")); if (!Directory.Exists(ppath)) { Directory.CreateDirectory(ppath); } if (string.IsNullOrWhiteSpace(uinfo.UserPhoto)) { uinfo.UserPhoto = UniqueTo.LongId() + ".jpg"; } var upname = uinfo.UserPhoto.Split('?')[0]; var npnew = upname + "?" + DateTime.Now.ToTimestamp(); switch (type) { case "file": { source = source[(source.LastIndexOf(",") + 1)..];
/// <summary> /// 创建App /// </summary> /// <param name="owner">用户,唯一,文件夹名</param> /// <returns></returns> public static ActionResultVM CreateApp(string owner) { var vm = new ActionResultVM(); try { using var db = new SQLiteConnection(SQLiteConn); var mo = new SysKey() { SkAppId = Core.UniqueTo.LongId().ToString(), SkAppKey = Core.UniqueTo.LongId().ToString() + Core.UniqueTo.LongId().ToString(), SkCreateTime = DateTime.Now, SkOwner = owner, SkToken = NewToken(), SkTokenExpireTime = DateTime.Now.AddMinutes(GlobalTo.GetValue <int>("Safe:TokenExpired")), SkRemark = "通过接口创建" }; int num = db.Insert(mo); vm.Set(num > 0); vm.Data = mo; } catch (Exception ex) { vm.Set(ex); } return(vm); }
/// <summary> /// 验证Token /// </summary> /// <param name="token"></param> /// <returns></returns> public static Domain.UserInfo TokenValid(string token) { Domain.UserInfo mo = null; try { if (!string.IsNullOrWhiteSpace(token)) { var key = GlobalTo.GetValue("VerifyCode:Key"); var jo = Core.CalcTo.AESDecrypt(token, key).ToJObject(); if (DateTime.Now.ToTimestamp() < long.Parse(jo["expired"].ToString())) { mo = jo["mo"].ToString().ToEntity <Domain.UserInfo>(); } } } catch (Exception ex) { Console.WriteLine(ex); } return(mo); }
/// <summary> /// 部署 /// </summary> public void Deploy() { //根目录 string domainPath = GlobalTo.GetValue("WebHook:GitHub:DomainRootPath"); //子域名&文件夹 string subdomain = PrepositoryName; if (!string.IsNullOrWhiteSpace(PhomePage)) { subdomain = PhomePage.Replace("//", "^").Split('^')[1].Split('.')[0]; } string path = domainPath + subdomain; //异步 ThreadPool.QueueUserWorkItem(callBack => { if (!Directory.Exists(path)) { string cmd = CmdFor.GitClone(PgitUrl, path); Core.CmdTo.Shell(cmd); } else { string cmd = CmdFor.GitPull(path); Core.CmdTo.Shell(cmd); } }); }
/// <summary> /// 创建App /// </summary> /// <returns></returns> public static ActionResultVM CreateApp() { var vm = new ActionResultVM(); try { using var db = new SQLiteConnection(SQLiteConn); db.CreateTable <SysKey>(); var mo = new SysKey() { SkAppId = Core.UniqueTo.LongId().ToString(), SkAppKey = Core.UniqueTo.LongId().ToString() + Core.UniqueTo.LongId().ToString(), SkCreateTime = DateTime.Now, SkName = "默认", SkToken = Core.CalcTo.MD5(Core.UniqueTo.LongId().ToString()), SkTokenExpireTime = DateTime.Now.AddMinutes(GlobalTo.GetValue <int>("Safe:TokenExpired")), SkRemark = "系统自动生成" }; int num = db.Insert(mo); vm.Set(num > 0); vm.Data = mo; } catch (Exception ex) { vm.Set(ex); } return(vm); }
/// <summary> /// 备份数据库 /// </summary> public static ActionResultVM BackupDataBase() { var vm = new ActionResultVM(); try { var listMsg = new List <object>(); var kp = "Work:BackupDataBase:SQLServer:"; //执行命令 using var db = new ContextBase(); using var conn = db.Database.GetDbConnection(); conn.Open(); var connCmd = conn.CreateCommand(); connCmd.CommandText = GlobalTo.GetValue(kp + "cmd"); int en = connCmd.ExecuteNonQuery(); listMsg.Add(en); vm.Set(ARTag.success); vm.data = listMsg; } catch (Exception ex) { vm.Set(ex); } return(vm); }
void IJob.Execute() { //启用任务 if (GlobalTo.GetValue <bool>("Task:Enable")) { SmsNotSent(); } }
public SharedResultVM ClearTmp() { return(SharedResultVM.Try(vm => { string directoryPath = PathTo.Combine(GlobalTo.WebRootPath, GlobalTo.GetValue("StaticResource:TmpDir")); vm.Log.Add($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} 清理临时目录:{directoryPath}"); if (!Directory.Exists(directoryPath)) { vm.Set(SharedEnum.RTag.lack); vm.Msg = "文件路径不存在"; } else { int delFileCount = 0; int delFolderCount = 0; //删除文件 var listFile = Directory.GetFiles(directoryPath).ToList(); foreach (var path in listFile) { if (!path.Contains("README")) { try { System.IO.File.Delete(path); delFileCount++; } catch (Exception ex) { vm.Log.Add($"删除文件异常:{ex.Message}"); } } } //删除文件夹 var listFolder = Directory.GetDirectories(directoryPath).ToList(); foreach (var path in listFolder) { try { Directory.Delete(path, true); delFolderCount++; } catch (Exception ex) { vm.Log.Add($"删除文件夹异常:{ex.Message}"); } } vm.Log.Insert(0, $"删除文件{delFileCount}个,删除{delFolderCount}个文件夹"); vm.Set(SharedEnum.RTag.success); } return vm; })); }
public Startup(IConfiguration configuration, IHostEnvironment env) { GlobalTo.Configuration = configuration; GlobalTo.HostEnvironment = env; SharedReady.ReadyTo.EncodingReg(); SharedReady.ReadyTo.LegacyTimestamp(); //结巴词典路径 var jbPath = PathTo.Combine(GlobalTo.ContentRootPath, "db/jieba"); if (!Directory.Exists(jbPath)) { Directory.CreateDirectory(jbPath); try { var dhost = "https://raw.githubusercontent.com/anderscui/jieba.NET/master/src/Segmenter/Resources/"; "prob_trans.json,prob_emit.json,idf.txt,pos_prob_start.json,pos_prob_trans.json,pos_prob_emit.json,char_state_tab.json".Split(',').ToList().ForEach(file => { var fullPath = PathTo.Combine(jbPath, file); HttpTo.DownloadSave(HttpTo.HWRequest(dhost + file), fullPath); }); } catch (Exception ex) { Console.WriteLine(ex); } } JiebaNet.Segmenter.ConfigManager.ConfigFileBaseDir = jbPath; #region 第三方登录 new List <Type> { typeof(QQConfig), typeof(WeChatConfig), typeof(WeiboConfig), typeof(GitHubConfig), typeof(GiteeConfig), typeof(TaoBaoConfig), typeof(MicroSoftConfig), typeof(DingTalkConfig), typeof(GoogleConfig), typeof(AliPayConfig), typeof(StackOverflowConfig) }.ForEach(lc => { var fields = lc.GetFields(); foreach (var field in fields) { if (!field.Name.StartsWith("API_")) { var cv = GlobalTo.GetValue($"OAuthLogin:{lc.Name.Replace("Config", "")}:{field.Name}"); field.SetValue(lc, cv); } } }); #endregion }
/// <summary> /// 信息完整 /// </summary> /// <param name="context"></param> /// <returns></returns> public static SharedResultVM CompleteInfoValid(HttpContext context) { var vm = new SharedResultVM(); if (!context.User.Identity.IsAuthenticated) { vm.Log.Add("先登录"); } else { if (GlobalTo.GetValue <bool>("Common:CompleteInfo")) { var uinfo = Get(context); if (string.IsNullOrWhiteSpace(uinfo.Nickname)) { vm.Log.Add("填写昵称"); } using var db = Data.ContextBaseFactory.CreateDbContext(); var umo = db.UserInfo.Find(uinfo.UserId); if (umo.UserId != GlobalTo.GetValue <int>("Common:AdminId")) { if (umo.UserMailValid != 1) { vm.Log.Add("验证邮箱"); } if (string.IsNullOrWhiteSpace(umo.UserPhone) || umo.UserPhone.Trim().Length != 11) { vm.Log.Add("填写手机号码"); } if (string.IsNullOrWhiteSpace(umo.OpenId1) && string.IsNullOrWhiteSpace(umo.OpenId2) && string.IsNullOrWhiteSpace(umo.OpenId3) && string.IsNullOrWhiteSpace(umo.OpenId4) && string.IsNullOrWhiteSpace(umo.OpenId5) && string.IsNullOrWhiteSpace(umo.OpenId6)) { vm.Log.Add("绑定一项授权关联"); } if (umo.UserCreateTime.Value.AddDays(15) > DateTime.Now) { vm.Log.Add("新注册用户需 15 天以后才能操作"); } } } } vm.Set(vm.Log.Count == 0); vm.Msg = string.Join("、", vm.Log); return(vm); }
/// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } //初始化库 using var db = new SQLite.SQLiteConnection(Application.FileServerService.SQLiteConn); db.CreateTable <Model.SysApp>(); db.CreateTable <Model.FileRecord>(); //配置swagger app.UseSwagger().UseSwaggerUI(c => { c.DocumentTitle = "FileServer API"; c.SwaggerEndpoint("/swagger/v1/swagger.json", "FileServer API"); c.InjectStylesheet("/Home/SwaggerCustomStyle"); }); //静态资源允许跨域 app.UseStaticFiles(new StaticFileOptions() { OnPrepareResponse = (x) => { x.Context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); }, ServeUnknownFileTypes = true }); //目录浏览 string vrootdir = GlobalTo.GetValue("StaticResource:RootDir"); string prootdir = Fast.PathTo.Combine(GlobalTo.WebRootPath, vrootdir); if (!System.IO.Directory.Exists(prootdir)) { System.IO.Directory.CreateDirectory(prootdir); } app.UseFileServer(new FileServerOptions() { FileProvider = new PhysicalFileProvider(prootdir), RequestPath = new Microsoft.AspNetCore.Http.PathString(vrootdir), EnableDirectoryBrowsing = GlobalTo.GetValue <bool>("Safe:EnableDirectoryBrowsing"), EnableDefaultFiles = false }); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); }
public ActionResultVM Token([FromBody] ChatLoginVM chatLogin) { var vm = new ActionResultVM(); try { if (string.IsNullOrWhiteSpace(chatLogin.UserName) || string.IsNullOrWhiteSpace(chatLogin.Password)) { vm.Set(ARTag.invalid); vm.Msg = "账号或密码不能为空"; return(vm); } var pw = Core.CalcTo.MD5(chatLogin.Password); var uo = db.NChatUser.FirstOrDefault(x => x.CuUserName == chatLogin.UserName && x.CuPassword == pw); if (uo == null) { vm.Set(ARTag.unauthorized); vm.Msg = "账号或密码错误"; return(vm); } //token带的用户信息 var claims = new List <Claim> { new Claim(ClaimTypes.NameIdentifier, uo.CuUserId), new Claim(ClaimTypes.Name, uo.CuUserName), new Claim(ClaimTypes.UserData, new{ chatLogin.Device, chatLogin.Sign }.ToJson()) }; var expireDate = GlobalTo.GetValue <int>("TokenManagement:AccessExpiration"); var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(GlobalTo.GetValue("TokenManagement:Secret"))); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var jwtToken = new JwtSecurityToken(GlobalTo.GetValue("TokenManagement:Issuer"), GlobalTo.GetValue("TokenManagement:Audience"), claims, expires: DateTime.Now.AddSeconds(expireDate), signingCredentials: credentials); vm.Data = new { token = new JwtSecurityTokenHandler().WriteToken(jwtToken), expireDate, userId = uo.CuUserId, userName = uo.CuUserName, userPhoto = uo.CuUserPhoto }; vm.Set(ARTag.success); } catch (Exception ex) { vm.Set(ex); } return(vm); }
public IActionResult UI() { var dkui = GlobalTo.GetValue("DataKitUI"); string crContent; try { //非完整路径,相对项目路径,即 UI 静态页面放置到项目资源目录下 if (!dkui.StartsWith("http")) { var currHost = $"{Request.Scheme}://{Request.Host}{Request.PathBase}"; if (dkui.StartsWith("/") && currHost.EndsWith("/")) { currHost = currHost.TrimEnd('/'); } dkui = currHost + dkui; } //优先取缓存 var cacheDkui = Core.CacheTo.Get("DataKitUI") as string; if (string.IsNullOrWhiteSpace(cacheDkui)) { crContent = Core.HttpTo.Get(dkui); Core.CacheTo.Set("DataKitUI", crContent); } else { crContent = cacheDkui; System.Threading.ThreadPool.QueueUserWorkItem(_ => { try { Core.CacheTo.Set("DataKitUI", Core.HttpTo.Get(dkui)); } catch (Exception) { } }); } } catch (Exception ex) { crContent = "请求 UI 地址异常,错误信息:" + ex.Message; } return(new ContentResult() { StatusCode = 200, ContentType = "text/html", Content = crContent }); }
/// <summary> /// 生成Token /// </summary> /// <param name="mo">授权用户信息</param> /// <returns></returns> public static string TokenMake(LoginUserVM mo) { var key = GlobalTo.GetValue("VerifyCode:Key"); var token = Core.CalcTo.EnDES(new { mo, expired = DateTime.Now.AddDays(10).ToTimestamp() }.ToJson(), key); return(token); }
/// dotnet Netnr.Blog.Web.dll --urls "https://*:50" public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { //配置Kestrel接收文件 webBuilder.ConfigureKestrel((context, options) => { options.Limits.MaxRequestBodySize = GlobalTo.GetValue <int>("StaticResource:MaxSize") * 1024 * 1024; }); webBuilder.UseStartup <Startup>(); });
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } //配置swagger app.UseSwagger().UseSwaggerUI(c => { c.DocumentTitle = $"{GlobalTo.GetValue("Common:EnglishName")} API"; c.SwaggerEndpoint("/swagger/v1/swagger.json", c.DocumentTitle); }); //默认起始页index.html DefaultFilesOptions options = new DefaultFilesOptions(); options.DefaultFileNames.Add("index.html"); app.UseDefaultFiles(options); //静态资源允许跨域 app.UseStaticFiles(new StaticFileOptions() { OnPrepareResponse = (x) => { x.Context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); } }); app.UseRouting(); //授权访问 app.UseAuthentication(); app.UseAuthorization(); //session app.UseSession(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapControllerRoute("U", "{controller=U}/{id}", new { action = "index" }); endpoints.MapControllerRoute("areas", "{area:exists}/{controller=Home}/{action=Index}/{id?}"); endpoints.MapControllerRoute("Code", "{area:exists}/{controller=Code}/{id?}/{sid?}", new { action = "index" }); endpoints.MapControllerRoute("Raw", "{area:exists}/{controller=Raw}/{id?}", new { action = "index" }); endpoints.MapControllerRoute("User", "{area:exists}/{controller=User}/{id?}", new { action = "index" }); }); }
public void OnAuthorization(AuthorizationFilterContext context) { //验证登录标记是最新,不是则注销登录(即同一用户不允许同时在线,按缓存时间生效) if (context.HttpContext.User.Identity.IsAuthenticated && GlobalTo.GetValue <bool>("SingleSignOn")) { var uinfo = new Application.UserAuthService(context.HttpContext).Get(); string ServerSign = HelpFuncTo.GetLogonSign(uinfo.UserId); if (uinfo.UserSign != ServerSign) { context.HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); } } }
public IActionResult Index() { if (db.Database.IsInMemory()) { return(Content("不支持内存数据库,请切换其它数据库")); } if (Enum.TryParse(GlobalTo.GetValue("TypeDB"), true, out TypeDB tdb)) { ViewData["dbi"] = (int)tdb; } return(View()); }
/// <summary> /// 创建 DbContextOptionsBuilder /// </summary> /// <returns></returns> public static DbContextOptionsBuilder <ContextBase> CreateDbContextOptionsBuilder(DbContextOptionsBuilder builder = null) { if (builder == null) { builder = new DbContextOptionsBuilder <ContextBase>(); } if (!builder.IsConfigured) { System.Enum.TryParse(GlobalTo.GetValue("TypeDB"), true, out GlobalTo.TDB); var conn = GlobalTo.GetConn(); switch (GlobalTo.TDB) { case TypeDB.MySQL: builder.UseMySql(conn); break; case TypeDB.SQLite: builder.UseSqlite(conn.Replace("~", GlobalTo.ContentRootPath)); break; case TypeDB.SQLServer: builder.UseSqlServer(conn, options => { //启用 row_number 分页 (兼容2005、2008) //options.UseRowNumberForPaging(); }); break; case TypeDB.PostgreSQL: { builder.UseNpgsql(conn); } break; case TypeDB.InMemory: builder.UseInMemoryDatabase(conn); break; } //注册日志(修改日志等级为Information,可查看执行的SQL语句) builder.EnableSensitiveDataLogging(); builder.UseLoggerFactory(LoggerFactory); } return(builder as DbContextOptionsBuilder <ContextBase>); }