轉自:https://github.com/huguodong
開發環境
Visual Studio 2019
.net core 3.1
創建項目
新建.net core web項目,如果沒有安裝.net core sdk的使用vs2019的安裝中心安裝,這里默認已經安裝了.net core 3.1
此處我們選擇API(選擇API系統會為我們自動創建WebApi需要的一些配置文件等),Https配置這一項我們暫時不勾選,目前我們不配置Https。
點創建以后的界面如下圖:
Program.cs 說明
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
這個Program是程序的入口, 看起來很眼熟, 是因為asp.net core application實際就是控制台程序(console application).
它是一個調用asp.net core 相關庫的console application.
Main方法里面的內容主要是用來配置和運行程序的.
因為我們的web程序需要一個宿主, 所以 BuildWebHost這個方法就創建了一個WebHostBuilder. 而且我們還需要Web Server.
asp.net core 自帶了兩種http servers, 一個是WebListener, 它只能用於windows系統, 另一個是kestrel, 它是跨平台的.
kestrel是默認的web server, 就是通過UseKestrel()這個方法來啟用的.
但是我們開發的時候使用的是IIS Express, 調用UseIISIntegration()這個方法是啟用IIS Express, 它作為Kestrel的Reverse Proxy server來用.
如果在windows服務器上部署的話, 就應該使用IIS作為Kestrel的反向代理服務器來管理和代理請求.
如果在linux上的話, 可以使用apache, nginx等等的作為kestrel的proxy server.
當然也可以單獨使用kestrel作為web 服務器, 但是使用iis作為reverse proxy還是有很多有優點的: 例如,IIS可以過濾請求, 管理證書, 程序崩潰時自動重啟等.
UseStartup<Startup>(), 這句話表示在程序啟動的時候, 我們會調用Startup這個類.
Build()完之后返回一個實現了IWebHost接口的實例(WebHostBuilder), 然后調用Run()就會運行Web程序, 並且阻止這個調用的線程, 直到程序關閉.
Startup.cs 說明
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(); } // 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.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } }
其實Startup算是程序真正的切入點.
ConfigureServices方法是用來把services(各種服務, 例如identity, sqlsugar,swagger等等包括第三方的, 或者自己寫的)加入(register)到container(asp.net core的容器)中去, 並配置這些services. 這個container是用來進行dependency injection的(依賴注入). 所有注入的services(此外還包括一些框架已經注冊好的services) 在以后寫代碼的時候, 都可以將它們注入(inject)進去. 例如上面的Configure方法的參數, app, env, loggerFactory都是注入進去的services.
Configure方法是asp.net core程序用來 具體指定如何處理每個http請求的, 例如我們可以讓這個程序知道我使用路由規則來處理http請求, 那就調用app.UseRouting()這個方法就行項目調試
.net core 調試的兩種方法有兩種,IIS調試和項目自帶的Kestrel web應用調式,這里從 launchsettings.json刪除IIS調試使用Kestrel web就行。
launchsettings.json是程序的啟動配置文件,關於 launchsettings.json可以參考https://www.cnblogs.com/wer-ltm/p/11028234.html
F5運行程序
瀏覽器顯示的是官方提供的一個現實天氣信息的api
創建第一個Controller
刪除系統默認創建的WeatherForecastController.cs
和WeatherForecast.cs並在controller文件夾
新建一個控制器,命名:UserController.cs
新建成功之后如下圖所示:
我們在UserController
中增加一個hello
的get
方式的接口方法,返回一個hello world
,我們打算通過請求api/user/hello
來得到這個hello
[Route("api/[controller]")] [ApiController] public class UserController : ControllerBase { [HttpGet] public IActionResult Hello() { return Ok("Hello World"); } }
F5運行程序,為啥直接給打開weatherforecast
,而且還404了!
在項目Properties
中打開launchsettings.json,修改lauchUrl屬性。launchUrl表示系統啟動時候請求的url。
F5啟動項目,你會發現,還是顯示404
api/user/hello
來得到這個
hello
,所以我們要在
UserController
里定義一個
action
的動作,這樣才能通過
api/user/hello
來得到這個
hello
,如下圖

F5運行項目,成功顯示了Hello world。
增加全局路由
上面增加action
雖然能達到想要的結果,但是每次新建一個Controller
都有寫個action,有點麻煩,如果哪天領導不高興,要改規則,有點麻煩的,如果定義一個全局規則,那么只需要修改一個地方,所有的規則都變了。
首先去掉Controller里的Route
和ApiController
修改Startup.cs
,增加路由模版
這樣所有的控制台都可以遵循這個規則來訪問。