|
using BookStore.Data; |
|
using Microsoft.AspNetCore.Authentication.JwtBearer; |
|
using Microsoft.AspNetCore.Builder; |
|
using Microsoft.AspNetCore.Hosting; |
|
using Microsoft.AspNetCore.HttpsPolicy; |
|
using Microsoft.AspNetCore.Identity; |
|
using Microsoft.AspNetCore.Mvc; |
|
using Microsoft.EntityFrameworkCore; |
|
using Microsoft.Extensions.Configuration; |
|
using Microsoft.Extensions.DependencyInjection; |
|
using Microsoft.Extensions.Hosting; |
|
using Microsoft.Extensions.Logging; |
|
using Microsoft.IdentityModel.Tokens; |
|
using Microsoft.OpenApi.Models; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Linq; |
|
using System.Text; |
|
using System.Threading.Tasks; |
|
|
|
namespace BookStore |
|
{ |
|
public class Startup |
|
{ |
|
public Startup(IConfiguration configuration) |
|
{ |
|
Configuration = configuration; |
|
} |
|
|
|
public IConfiguration Configuration { get; } |
|
|
|
// This method gets called by the runtime. Use this method to add services to the container. |
|
public void ConfigureServices(IServiceCollection services) |
|
{ |
|
services.AddControllers(); |
|
services.AddDbContext<BookStoreDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); |
|
services.AddIdentity<ApplicationUser, IdentityRole>() |
|
.AddEntityFrameworkStores<BookStoreDbContext>() |
|
.AddDefaultTokenProviders(); |
|
services.AddAuthentication(options => |
|
{ |
|
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; |
|
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; |
|
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; |
|
}) |
|
.AddJwtBearer(options => |
|
{ |
|
options.SaveToken = true; |
|
options.RequireHttpsMetadata = false; |
|
options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters() |
|
{ |
|
ValidateIssuer = true, |
|
ValidateAudience = true, |
|
ValidAudience = "https://dotnetdetail.net", |
|
ValidIssuer = "https://dotnetdetail.net", |
|
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("7S79jvOkEdwoRqHx")) |
|
}; |
|
}); |
|
services.AddSwaggerGen(c => |
|
{ |
|
c.SwaggerDoc("v1", new OpenApiInfo { Title = "BookStore", Version = "v1" }); |
|
}); |
|
} |
|
|
|
// 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(); |
|
app.UseSwagger(); |
|
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "BookStore v1")); |
|
} |
|
SeedDB.Initialize(app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope().ServiceProvider); |
|
app.UseHttpsRedirection(); |
|
app.UseRouting(); |
|
app.UseAuthentication(); |
|
app.UseAuthorization(); |
|
app.UseEndpoints(endpoints => |
|
{ |
|
endpoints.MapControllers(); |
|
}); |
|
} |
|
} |
|
} |