Controller和View依賴于Model,Controller依賴于View,這也是分離的一個好處。 

換句話說,Controller會選取適當的View來展現給用戶,并一同把用戶請求的Model數據帶回去。 

 

API消費者發出請求的時候,在Controller上面的Action將會被觸發,Controller會把接收到的輸入數據發送給負責業務處理邏輯或數據訪問邏輯的那部分程序。然后Controller會把Model返回給View,這里的View就是資源的展示(通常是JSON格式)。?

 

接下來我們就是用這套概念和ASP.NET Core 3.0?來創建RESTful API。?

但是請注意,通過ASP.NET Core MVC或API模板建立出來的新項目,我們并不會直接得到RESTful(REST架構風格)的API。我們必須在這個基礎上,自己構建RESTful的API,因為之前已經提到了,標準的RESTful API有很多約束和規范。?

 

創建ASP.NET Core 3.0 Web API項目 

打開VS2019,選擇項目模板ASP.NET Core Web Application:?

然后為項目和解決方案起名字,并選擇所在目錄:?

然后選擇ASP.NET Core的項目模板:?

首先要選擇ASP.NET Core 3.0。?

這里我選擇了API這個模板。在以前,我通常會選擇Empty模板,因為其它模板通常包含很多我不需要的東西,但是ASP.NET Core 3.0的API模板還是比較干凈的,可以接受。?

最后,由于本課程中不需要使用HTTPS和Docker,所以把這兩個東西都勾掉。?

 

解剖 ASP.NET Core 3.0 API 模板項目 

點擊Create,項目就建立好了:?

先看看?appsettings.json:

里面只有默認的Log配置以及允許的Hosts。 

 

而appsettings.Development.json里面:

也只有關于Log的默認配置。 

 

注意:您需要知道appsettings.json?和?appsettings.Development.json之間的關系,關于這點可以看我ASP.NET Core 3.0的入門視頻教程,但是更簡單的辦法是看一下官方文檔:在ASP.NET Core中使用多個環境。?

 

項目模板里還有兩個類我們不需要,所以把它刪掉,分別是WeatherForecastController和WeatherForecast:?

Program.cs:?

這里其實就是整個程序的入口,Main方法負責配置和運行整個Web程序。?

由于這是一個Web項目,所以我們還需要一個宿主(Host),這個宿主就是由下面的CreateHostBuilder方法來負責創建的。該方法首先會創建出一個實現了IHostBuilder接口的類(HostBuilder)的實例,然后調用它的Build方法來創建宿主(類型為Host,實現了IHost接口),最后調用宿主上面的Run方法來運行程序。?

 

我們暫時不修改這里面的代碼,所以一切都會按照項目模板默認的配置進行,注意到下面的方法里我們使用到了Startup這個類:?

所以我們來看看Startup類。 

 

Startup.cs 

在這個類的構造函數里:?

我們看到IConfiguration被注入了,這樣就允許我們使用配置信息了,例如appsettings.json里面的配置信息。 

 

下面有一個ConfigureServices方法:?

這個方法負責向服務容器里面注冊服務,已注冊的服務可以通過依賴注入的方式在整個應用程序的其它地方進行使用。這里的服務是一個比較廣義的概念,它就是一個在整個程序中做一些通用性操作的組件。 

 

這里面只有一句話:?

在3.0之前的版本里,這里面應該寫的是services.AddMvc();,實際上在ASP.NET?Core 3.0里面這樣寫也是可以的。但是AddMvc()里面不僅僅包含用于構建API的服務,還包含很多其它服務,例如構建View視圖和TagHelper相關的服務等。而AddControllers()方法只包含用于構建API的那些服務,例如Controller的支持、Model綁定、Data?Annotation和格式化器等等。?

 

最下面還有一個Configure方法:?

這個方法使用到了在ConfigureServices方法里面注冊和配置的服務,所以這個方法是在ConfigureServices方法之后被調用的。 

Configure方法是用來指定ASP.NET Core Web程序是如何響應每一個HTTP請求的。換句話說,也就是我們在這里配置請求的管道,配置的方法就是在這里添加很多中間件(Configure方法里面每一個app.UseXxx就是添加一個中間件,可以查看中間件的官方文檔來了解更多)。?

 

在開發環境的時候,如果有異常發生,那么會展示出一個異常頁面:?

app.UseAuthorization(),它會為整個Web程序添加授權的能力。當你需要考慮API安全性的時候,這點就很重要了。通常授權配置是在ConfigureServices方法里完成的,而我現在沒有對授權進行配置,但是app.UseAuthorization()仍然會允許API可以被匿名的訪問。?

 

其它這幾句話:?

這幾句話都是用來指定如何把HTTP請求分配到特定的Controller?Action上面的。也就是說這是關于路由的。?

 

很重要的一點就是:每一個請求會按照代碼的順序穿越所有在這里添加的中間件。但是每一個中間件都有可能將請求短路,這樣的話請求就不會進入下一個中間件了,而會按照原路返回。

所以,添加中間件的順序非常重要。如果你把授權中間件放在了Controller的后邊,那么即使需要授權,那么請求也會先到達Controller并執行里面的代碼,這樣的話授權就沒有意義了。 

 

修改項目啟動配置 

我喜歡使用控制臺啟動Web程序,這樣可以很直觀的看到Log信息。為達到這個目的,可以修改launchSettings.json文件:

修改后,在項目的Debug屬性里也有體現:?

由于我主要是使用POSTMAN來調用API,所以我不需要Launch Browser(啟動瀏覽器)。 

 

運行程序?

可以看到程序可以正常運行,并且在控制臺上有日志的輸出。?

本文章轉載微信公眾號@dotNET跨平臺

上一篇:

.NET Core 下的 API 網關

下一篇:

.NET REST API 中的序列化和反序列化
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費