Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
    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);
    }
Ejemplo n.º 6
0
 public KaspDbAppBuilder(KaspAppBuilder appBuilder, DbContext dbContext) : base(appBuilder.ApplicationBuilder)
 {
     Db = dbContext;
 }