public void ImportAlbumData() { File.Delete("AlbumViewerData.sqlite"); var Context = new AlbumViewerContext() { useSqLite = true, ConnectionString = "server=.;database=AlbumViewer2;integrated security=true;MultipleActiveResultSets=true;App=AlbumViewer" }; AlbumViewerDataImporter.EnsureAlbumData(Context, Path.GetFullPath("./albums.js")); }
public bool ReloadData() { if (!HttpContext.User.Identity.IsAuthenticated) { throw new ApiException("You have to be logged in to modify data", 401); } string isSqLite = Configuration["data:useSqLite"]; try { if (isSqLite != "true") { // ExecuteSqlRaw // in EF 3.0 context.Database.ExecuteSqlRaw(@" drop table Tracks; drop table Albums; drop table Artists; drop table Users; "); } else { // this is not reliable for mutliple connections context.Database.CloseConnection(); try { System.IO.File.Delete(Path.Combine(Directory.GetCurrentDirectory(), "AlbumViewerData.sqlite")); } catch { throw new ApiException("Can't reset data. Existing database is busy."); } } } catch { } AlbumViewerDataImporter.EnsureAlbumData(context, Path.Combine(HostingEnv.ContentRootPath, "albums.js")); return(true); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, AlbumViewerContext albumContext) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseBrowserLink(); } else { app.UseExceptionHandler("/Home/Error"); } // Enable Cookie Auth with automatic user policy app.UseCookieAuthentication(new CookieAuthenticationOptions() { AutomaticAuthenticate = true, AutomaticChallenge = true, LoginPath = "/api/login" }); app.UseDatabaseErrorPage(); app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); bool result = AlbumViewerDataImporter.EnsureAlbumData(albumContext, Path.Combine(env.WebRootPath, "data//albums.js")); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory, AlbumViewerContext albumContext, IConfiguration configuration) { //// Serilog config - add logfile output Log.Logger = new LoggerConfiguration() .WriteTo.RollingFile(pathFormat: "logs\\log-{Date}.log") .CreateLogger(); loggerFactory .AddSerilog(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler(errorApp => // Application level exception handler here - this is just a place holder errorApp.Run(async(context) => { context.Response.StatusCode = 500; context.Response.ContentType = "text/html"; await context.Response.WriteAsync("<html><body>\r\n"); await context.Response.WriteAsync( "We're sorry, we encountered an un-expected issue with your application.<br>\r\n"); // Capture the exception var error = context.Features.Get <IExceptionHandlerFeature>(); if (error != null) { // This error would not normally be exposed to the client await context.Response.WriteAsync("<br>Error: " + HtmlEncoder.Default.Encode(error.Error.Message) + "<br>\r\n"); } await context.Response.WriteAsync("<br><a href=\"/\">Home</a><br>\r\n"); await context.Response.WriteAsync("</body></html>\r\n"); await context.Response.WriteAsync(new string(' ', 512)); // Padding for IE })); } //app.UseHttpsRedirection(); Console.WriteLine("\r\nPlatform: " + System.Runtime.InteropServices.RuntimeInformation.OSDescription); string useSqLite = Configuration["Data:useSqLite"]; Console.WriteLine(useSqLite == "true" ? "SqLite" : "Sql Server"); app.UseRouting(); app.UseCors("CorsPolicy"); app.UseAuthentication(); app.UseAuthorization(); //app.UseDatabaseErrorPage(); app.UseStatusCodePages(); app.UseDefaultFiles(); // so index.html is not required app.UseStaticFiles(); // Handle Lets Encrypt Route (before MVC processing!) // alternately use an MVC Route (in ConfigurationController) //app.UseRouter(r => //{ // r.MapGet(".well-known/acme-challenge/{id}", async (request, response, routeData) => // { // var id = routeData.Values["id"] as string; // var file = Path.Combine(env.WebRootPath, ".well-known","acme-challenge", id); // await response.SendFileAsync(file); // }); //}); //// put last so header configs like CORS or Cookies etc can fire app.UseEndpoints(endpoints => { endpoints.MapControllers(); // .RequireCors("CorsPolicy"); // doesn't seem to work - .UseCors("CorsPolicy") still required }); // catch-all handler for HTML5 client routes - serve index.html app.Run(async context => { // Make sure Angular output was created in wwwroot // Running Angular in dev mode nukes output folder! // so it could be missing. if (env.WebRootPath == null) { throw new InvalidOperationException("wwwroot folder doesn't exist. Please recompile your Angular Project before accessing index.html. API calls will work fine."); } context.Response.ContentType = "text/html"; await context.Response.SendFileAsync(Path.Combine(env.WebRootPath, "index.html")); }); // Initialize Database if it doesn't exist AlbumViewerDataImporter.EnsureAlbumData(albumContext, Path.Combine(env.ContentRootPath, "albums.js")); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, AlbumViewerContext albumContext) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); } else { app.UseExceptionHandler(errorApp => // Application level exception handler here - this is just a place holder errorApp.Run(async(context) => { context.Response.StatusCode = 500; context.Response.ContentType = "text/html"; await context.Response.WriteAsync("<html><body>\r\n"); await context.Response.WriteAsync( "We're sorry, we encountered an un-expected issue with your application.<br>\r\n"); // Capture the exception var error = context.Features.Get <IExceptionHandlerFeature>(); if (error != null) { // This error would not normally be exposed to the client await context.Response.WriteAsync("<br>Error: " + HtmlEncoder.Default.Encode(error.Error.Message) + "<br>\r\n"); } await context.Response.WriteAsync("<br><a href=\"/\">Home</a><br>\r\n"); await context.Response.WriteAsync("</body></html>\r\n"); await context.Response.WriteAsync(new string(' ', 512)); // Padding for IE })); //loggerFactory.AddConsole(Configuration.GetSection("Logging")); //app.UseExceptionHandler("/"); //app.UseExceptionHandler("/Home/Error"); } //app.UseCors("CorsPolicy"); // Enable Cookie Auth with automatic user policy app.UseCookieAuthentication(new CookieAuthenticationOptions() { AutomaticAuthenticate = true, AutomaticChallenge = false, LoginPath = "/api/login" }); app.UseDatabaseErrorPage(); app.UseStatusCodePages(); app.UseDefaultFiles(); // so index.html is not required app.UseStaticFiles(); // put last so header configs like CORS or Cookies etc can fire app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); AlbumViewerDataImporter.EnsureAlbumData(albumContext, Path.Combine(env.WebRootPath, "App_Data/albums.js")); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, AlbumViewerContext albumContext, IConfiguration configuration) { Log.Logger = new LoggerConfiguration() .WriteTo.RollingFile(pathFormat: "logs\\log-{Date}.log") .CreateLogger(); if (env.IsDevelopment()) { loggerFactory.WithFilter(new FilterLoggerSettings { { "Trace", LogLevel.Trace }, { "Default", LogLevel.Trace }, { "Microsoft", LogLevel.Warning }, // very verbose { "System", LogLevel.Warning } }) .AddConsole() .AddSerilog(); app.UseDeveloperExceptionPage(); } else { loggerFactory.WithFilter(new FilterLoggerSettings { { "Trace", LogLevel.Trace }, { "Default", LogLevel.Trace }, { "Microsoft", LogLevel.Warning }, // very verbose { "System", LogLevel.Warning } }) .AddSerilog(); app.UseExceptionHandler(errorApp => // Application level exception handler here - this is just a place holder errorApp.Run(async(context) => { context.Response.StatusCode = 500; context.Response.ContentType = "text/html"; await context.Response.WriteAsync("<html><body>\r\n"); await context.Response.WriteAsync( "We're sorry, we encountered an un-expected issue with your application.<br>\r\n"); // Capture the exception var error = context.Features.Get <IExceptionHandlerFeature>(); if (error != null) { // This error would not normally be exposed to the client await context.Response.WriteAsync("<br>Error: " + HtmlEncoder.Default.Encode(error.Error.Message) + "<br>\r\n"); } await context.Response.WriteAsync("<br><a href=\"/\">Home</a><br>\r\n"); await context.Response.WriteAsync("</body></html>\r\n"); await context.Response.WriteAsync(new string(' ', 512)); // Padding for IE })); //loggerFactory.AddConsole(); //app.UseExceptionHandler("/"); //app.UseExceptionHandler("/Home/Error"); } // enable this to log ASP.NET messages into the log // not very useful except for troubleshooting //loggerFactory.WithFilter(new FilterLoggerSettings // { // {"Trace",LogLevel.Information }, // {"Default", LogLevel.Information}, // {"Microsoft", LogLevel.Warning}, // very verbose // {"System", LogLevel.Warning} // }) // .AddConsole() // .AddSerilog(); // loggerFactory.AddSerilog(new LoggerConfiguration() // .WriteTo.RollingFile(pathFormat: "asp-logs\\log-{Date}.log") // .CreateLogger(); //app.UseCors("CorsPolicy"); // Enable Cookie Auth with automatic user policy app.UseCookieAuthentication(new CookieAuthenticationOptions() { AutomaticAuthenticate = true, AutomaticChallenge = false, LoginPath = "/api/login" }); app.UseDatabaseErrorPage(); app.UseStatusCodePages(); app.UseDefaultFiles(); // so index.html is not required app.UseStaticFiles(); // put last so header configs like CORS or Cookies etc can fire app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); AlbumViewerDataImporter.EnsureAlbumData(albumContext, Path.Combine(env.ContentRootPath, "albums.js")); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, AlbumViewerContext albumContext, IConfiguration configuration) { // Serilog config Log.Logger = new LoggerConfiguration() .WriteTo.RollingFile(pathFormat: "logs\\log-{Date}.log") .CreateLogger(); if (env.IsDevelopment()) { //loggerFactory.WithFilter(new FilterLoggerSettings // { // {"Trace", LogLevel.Trace}, // {"Default", LogLevel.Trace}, // {"Microsoft", LogLevel.Warning}, // very verbose // {"System", LogLevel.Warning} // }) loggerFactory .AddDebug() .AddConsole() .AddSerilog(); app.UseDeveloperExceptionPage(); } else { loggerFactory //.WithFilter(new FilterLoggerSettings //{ // {"Trace", LogLevel.Trace}, // {"Default", LogLevel.Trace}, // {"Microsoft", LogLevel.Warning}, // very verbose // {"System", LogLevel.Warning} //}) .AddSerilog(); app.UseExceptionHandler(errorApp => // Application level exception handler here - this is just a place holder errorApp.Run(async(context) => { context.Response.StatusCode = 500; context.Response.ContentType = "text/html"; await context.Response.WriteAsync("<html><body>\r\n"); await context.Response.WriteAsync( "We're sorry, we encountered an un-expected issue with your application.<br>\r\n"); // Capture the exception var error = context.Features.Get <IExceptionHandlerFeature>(); if (error != null) { // This error would not normally be exposed to the client await context.Response.WriteAsync("<br>Error: " + HtmlEncoder.Default.Encode(error.Error.Message) + "<br>\r\n"); } await context.Response.WriteAsync("<br><a href=\"/\">Home</a><br>\r\n"); await context.Response.WriteAsync("</body></html>\r\n"); await context.Response.WriteAsync(new string(' ', 512)); // Padding for IE })); //app.UseExceptionHandler("/"); //app.UseExceptionHandler("/Home/Error"); } Console.WriteLine("\r\nPlatform: " + System.Runtime.InteropServices.RuntimeInformation.OSDescription); string useSqLite = Configuration["Data:useSqLite"]; Console.WriteLine(useSqLite == "true" ? "SqLite" : "Sql Server"); app.UseAuthentication(); app.UseDatabaseErrorPage(); app.UseStatusCodePages(); app.UseDefaultFiles(); // so index.html is not required app.UseStaticFiles(); // put last so header configs like CORS or Cookies etc can fire app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); // catch-all handler for HTML5 client routes - serve index.html app.Run(async context => { context.Response.ContentType = "text/html"; await context.Response.SendFileAsync(Path.Combine(env.WebRootPath, "index.html")); }); AlbumViewerDataImporter.EnsureAlbumData(albumContext, Path.Combine(env.ContentRootPath, "albums.js")); }