public static KaspAppBuilder UseExceptionHandler(this KaspAppBuilder app) { app.ApplicationBuilder.UseExceptionHandler(builder => { builder.Run(async context => { context.Response.ContentType = "application/json"; var error = new ErrorDetails(); var contextFeature = context.Features.Get <IExceptionHandlerFeature>(); if (contextFeature.Error is KaspRuntimeException exception) { error.Status = (int)exception.StatusCode; error.Message = exception.Message; } else { error.Status = (int)HttpStatusCode.InternalServerError; error.Message = contextFeature.Error.Message; } context.Response.StatusCode = error.Status; await context.Response.WriteAsync(JsonSerializer.Serialize(error)); }); }); return(app); }
public static KaspAppBuilder UseTestDataBase <TDbContext>(this KaspAppBuilder builder) where TDbContext : DbContext { var db = builder.ApplicationBuilder.ApplicationServices.GetService <TDbContext>(); db.Database.EnsureDeleted(); db.Database.EnsureCreated(); return(builder); }
public static KaspAppBuilder UseRequestLocalization(this KaspAppBuilder app, Action <KaspRequestLocalizationOptions> optionsAction = null) { var localizationOptions = app.ApplicationBuilder.ApplicationServices.GetService <IOptions <RequestLocalizationOptions> >().Value; var options = new KaspRequestLocalizationOptions(app.ApplicationBuilder.ApplicationServices, localizationOptions); optionsAction?.Invoke(options); app.ApplicationBuilder.UseRequestLocalization(localizationOptions); return(app); }
public static KaspDbAppBuilder UseDataBase <TDbContext>(this KaspAppBuilder builder, bool applyMigrates = true) where TDbContext : DbContext { var db = builder.ApplicationBuilder.ApplicationServices.CreateScope().ServiceProvider.GetService <TDbContext>(); var result = new KaspDbAppBuilder(builder, db); if (applyMigrates && !db.Database.IsInMemory()) { db.Database.Migrate(); } return(result); }
public static KaspAppBuilder UseIndexSpa(this KaspAppBuilder app, string[] ignorePaths = null) { var ignoreList = new List <string>(); ignoreList.AddRange(new[] { "/api" }); if (ignorePaths != null) { ignoreList.AddRange(ignorePaths); } app.ApplicationBuilder.Use(async(context, next) => { await next(); if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value) && !ignoreList.Any(x => context.Request.Path.Value.StartsWith(x))) { context.Request.Path = "/index.html"; await next(); } }); return(app); }
public KaspDbAppBuilder(KaspAppBuilder appBuilder, DbContext dbContext) : base(appBuilder.ApplicationBuilder) { Db = dbContext; }