-
Notifications
You must be signed in to change notification settings - Fork 0
/
Startup.cs
131 lines (117 loc) · 4.6 KB
/
Startup.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.EntityFrameworkCore;
using AspNetCoreTodo.Data;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using AspNetCoreTodo.Services;
using AspNetCoreTodo.Models;
using Microsoft.EntityFrameworkCore.Internal;
using System;
namespace AspNetCoreTodo
{
public class Startup
{
private IWebHostEnvironment _env;
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
_env = env;
Configuration = configuration;
}
public IConfiguration Configuration { get; }
private bool isSqlite(string dataSource)
{
return dataSource.EndsWith(".sqlite.db");
}
private bool isLocalDB(string dataSource)
{
return dataSource.EndsWith(".mdf");
}
private string getDataSource(string connStr)
{
var pieces = from p in connStr.Split(";")
select p.Trim();
var dataSources = from p in pieces
where p.StartsWith("Data Source")
select p.Split("=")[1];
return dataSources.FirstOrDefault();
}
private void configureDatabase(IServiceCollection services)
{
var connStr = Configuration.GetConnectionString("DefaultConnection");
string dataSource = getDataSource(connStr);
if (isLocalDB(dataSource)) {
configureLocalDB(services,dataSource);
} else if (isSqlite(dataSource)) {
configureSqlLite(services, dataSource);
}
else {
configureMsSQL(services, connStr);
}
}
private void configureMsSQL(IServiceCollection services, string connStr)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connStr));
}
private void configureLocalDB(IServiceCollection services, string fileName)
{
var filePath = _env.ContentRootPath + @"\" + fileName;
var connStr = $"Data Source=(LocalDb)\\MSSQLLocalDB;Integrated Security=SSPI;AttachDBFilename={filePath}";
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connStr));
}
private void configureSqlLite(IServiceCollection services, string fileName)
{
var filePath = _env.ContentRootPath + Path.DirectorySeparatorChar + fileName;
var connStr = $"Filename={filePath}";
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlite(connStr));
}
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IRedirectService, RedirectService>();
configureDatabase(services);
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddControllersWithViews();
services.AddRazorPages();
}
// 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.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
}
}