項(xiàng)目創(chuàng)建
ASP .NET Core Web Application 設(shè)置為Blog.Api
選擇Empty+No Authentication
-
添加.NET Core類庫(kù),Blog.Core + Blog.Infrastructure
Infrastructure 依賴 Core
Api 依賴 Infrastructure + Core
Program + Startup
-
Program進(jìn)行基礎(chǔ)設(shè)施的配置,很少發(fā)生變化
HTTP Server
集成 IIS
配置信息來源
-
Startup 配置自定義行為,可能經(jīng)常發(fā)生變化
組件 服務(wù) 功能
中間件管道
-
Startup.cs
ConfigureServices所有程序級(jí)的依賴項(xiàng)都可以在這里注冊(cè)到默認(rèn)的IoC容器里, 把它們添加到IServiceCollection即可Configure配置應(yīng)該遵循Add/Use的風(fēng)格樣式, 首先定義需要什么, 然后定義如何使用它.是真正負(fù)責(zé)配置HTTP請(qǐng)求管道的方法, 并且運(yùn)行時(shí)也需要它
基礎(chǔ)配置
-
運(yùn)行時(shí)環(huán)境 ASPNETCORE_ENVIRONMENT
ASP.NET Core還允許我們按約定為指定環(huán)境建立單獨(dú)的啟動(dòng)配置. 啟動(dòng)類可以通過這個(gè)函數(shù)定義UseStartup(startupAssemblyName: xxx); 運(yùn)行時(shí)會(huì)在這個(gè)指定的組件查找叫做Startup, Startup[環(huán)境名]的類, 其中[環(huán)境名]就是ASPNETCORE_ENVIRONMENT這個(gè)環(huán)境變量的值. 如果能找到指定環(huán)境的類, 那么它將覆蓋默認(rèn)的啟動(dòng)類.
例如:環(huán)境變量值如果是Development的話, 那么運(yùn)行時(shí)就會(huì)嘗試尋找Startup和StartupDevelopment類, 該約定在啟動(dòng)類里面的方法名上也有效, 環(huán)境特定的啟動(dòng)類里的兩個(gè)方法分別是 Configure[環(huán)境名]和Configure[環(huán)境名]Services.
ASPNETCORE_ENVIRONMENT環(huán)境變量 Production Development Staging 沒有設(shè)置則使用Production
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
//.UseStartup<Startup>();
.UseStartup(typeof(StartupDevelopment).GetTypeInfo().Assembly.FullName);
-
HTTPS
微軟建議所有應(yīng)用調(diào)用HTTPS重定向中間件,來把所有的HTTP請(qǐng)求重定向?yàn)镠TTPS
-
Startup:
- ConfigureServices方法注冊(cè),并配置端口及狀態(tài)碼
services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
options.HttpsPort = 5001;
});
* Configure方法使用該中間件: app.UseHttpsRedirection()
-
HSTS (HTTP Strict Transport Sercurity Protocol)
微軟建議在生產(chǎn)環(huán)境(production)下啟用HSTS
-
Startup:
- ConfigureServices方法注冊(cè)并配置 HSTS
//HSTS 只配置在生產(chǎn)環(huán)境
services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
options.ExcludedHosts.Add("example.com");
options.ExcludedHosts.Add("www.example.com");
});
* Configure方法使用該中間件: app.UseHsts()
- launchSettings.json
- 開發(fā)時(shí)只保留console,其余刪除
{
"profiles": {
"Blog.Api": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "http://localhost:5000/api/posts",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}