Пример #1
0
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "LaprTrackr.Backend v1"));
            }

            app.UseSerilogRequestLogging();
            app.UseHttpsRedirection();
            app.UseCors(options =>
            {
                options.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader();
            });

            app.UseRouting();
            app.UseAuthentication();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.MapGet("/", req => req.Response.WriteAsync("The service is working properly."));
            });

            app.Use(async(context, next) =>
            {
                try
                {
                    await next();
                }
                catch (Exception ex)
                {
                    Log.Error(ex, "Specified path is not found");
                    var exception = new LaprTrackrException(LaprTrackrStatusCodes.NotFound, "Specified path is not found");
                    var dto       = exception.GetResponse();

                    context.Response.StatusCode = 404;
                    await context.Response.WriteAsync(JsonSerializer.Serialize(dto));
                }
            });
        }
Пример #2
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers()
            .AddJsonOptions(options => options.JsonSerializerOptions.WriteIndented           = true)
            .ConfigureApiBehaviorOptions(options => options.InvalidModelStateResponseFactory = context =>
            {
                var exception       = new LaprTrackrException(LaprTrackrStatusCodes.BodyNotValid, "The specified body is invalid.");
                exception.ExtraData = context.ModelState.Select(x => x.Value.Errors.First().ErrorMessage).ToList();
                return(exception.GetActionResult());
            });

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo()
                {
                    Title   = "LaprTrackr.Backend",
                    Version = "v1"
                });
                OpenApiSecurityScheme securityScheme = new OpenApiSecurityScheme
                {
                    Type         = SecuritySchemeType.Http,
                    Scheme       = "Bearer",
                    In           = ParameterLocation.Header,
                    BearerFormat = "JWT",
                    Name         = "Authorization",
                    Description  = "Please insert JWT with Bearer into field",
                    Reference    = new OpenApiReference()
                    {
                        Id   = "Bearer",
                        Type = new ReferenceType?(ReferenceType.SecurityScheme)
                    }
                };

                c.AddSecurityDefinition(securityScheme.Reference.Id, securityScheme);
                c.AddSecurityRequirement(new OpenApiSecurityRequirement()
                {
                    {
                        securityScheme,
                        Array.Empty <string>()
                    }
                });
            });

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer           = true,
                    ValidateAudience         = true,
                    ValidateLifetime         = true,
                    ValidateIssuerSigningKey = true,
                    ValidIssuer      = Configuration["Jwt:Issuer"],
                    ValidAudience    = Configuration["Jwt:Issuer"],
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
                };
            });

            //services.AddDbContext<LaprTrackrContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
            services.AddDbContext <LaprTrackrContext>(options => options.UseSqlite("Data Source=database.db"));
            services.AddScoped <IAuthService, AuthService>();
            services.AddScoped <IFoodService, FoodService>();
        }