主頁 > .NET開發 > 使用ASP.NET Core 3.x 構建 RESTful API - 1.準備作業

使用ASP.NET Core 3.x 構建 RESTful API - 1.準備作業

2020-09-11 14:15:18 .NET開發

以前寫過ASP.NET Core 2.x的REST API文章,今年再更新一下到3.0版本,

 

先決條件

我在B站有一個非常入門的ASP.NET Core 3.0的視頻教程,如果您對ASP.NET Core不了解,就可以先看一下里面的基礎知識和API相關的內容,地址是:https://www.bilibili.com/video/av65313713/,

預備知識:ASP.NET Core 和 C# 

工具:Visual Studio 2019最新版(VSCodeVS for Mac,Rider等也湊合),POSTMAN 

 

Web API 

Web API通常是指“使用HTTP協議并通過網路呼叫的API”,由于它使用了HTTP協議,所以需要通過URI資訊來指定端點, 

 

API是Application Programming Interface的縮寫,是軟體的外部介面,也就是說,針對某個軟體,人們可以知道它的外部功能,但并不知道(也不需要知道)它的內部運作細節,為了從外部呼叫某些功能,需要指定軟體的呼叫規范等資訊,這樣的規范就是API, 

所以Web API就是一個Web系統,通過訪問URI可以與其進行資訊互動, 

 

大多數的 Web API 并不是 RESTful API 

REST一詞是在2000年首次出現的,它是由Roy Fielding博士在《架構風格以及基于網路的軟體架構設計》這篇論文中提到的,他為REST風格的API制定了一套約束規范或者叫架構風格 

所以準確的說,只有符合了Roy Fielding架構風格的Web API才能稱作是RESTful API,但是在實際開發中,有時候也有不完全符合Roy Fielding架構風格的情形出現,針對這點我將會在稍后的文章中介紹, 

 

MVC模式與RESTful API 

本系列文章中我將使用ASP.NET Core 3.0 MVC 來構建 RESTful API, 

 

MVC(Model-View-Controller)我認為是一種主要用來構建UI的架構模式,對于MVC模式其實有很多種解釋存在,但是無論那種解釋,它們都會強調松耦合和關注點分離(separation of concerns), 

也是由于這兩點的存在,程式的可測驗性會大大提高,程式各部分的可復用性也很高, 

更多關于MVC的介紹,可以看一下微軟的官方檔案:https://docs.microsoft.com/zh-cn/aspnet/core/mvc/overview?view=aspnetcore-3.0 

 

注意:MVC不是一個完整的應用程式架構,我認為它主要是用在展示層,所以實作UI就是MVC的一部分作業, 

 

如何把MVC映射到API

我認為API同樣可以看作是UI,它就是為API消費者所提供的UI, 

讓我們把MVC的三部分分別對應到API: 

  • Model,它負責處理程式資料的邏輯,這里的Model可以包含在當前級別獲取從存盤獲取資料的邏輯,但是有一些Model不包含任何邏輯,例如API所使用的DTOData transfer objects),這類的Model會被串行化到回應的body里面, 

  • View,它是程式里負責展示資料的那部分,在構建API的時候,View就是資料或資源的展示,現在通常使用JSON格式, 

  • Controller,它負責ViewModel之間的互動,包括處理用戶輸入,用API的術語來講,和API互動的“用戶”就是指API的消費者,這類用戶通常是另一個程式,例如Angular的SPA程式, 

 

下面看看MVC這三部分的依賴關系: 

Model View Controller

Controller和View依賴于ModelController依賴于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 

Create a new project Recent project templates gRPC Service •3 ASP.NET Core Web Application Console App (.NET Framework) Windows Forms App (.NET Framework) Search for templates (Alt+S) All Platforms Console App (.NET Core) Clear All Project Types A project for creating a comman ne application that can n_ln on .NET Core on Windows, Linux and MacOS. Linux macOS dows Console ASP.NET Core Web Application ject templates for creating ASP.NET Core web apps and web APIs for Windows, Linux and macOS using .NET Core or .NET Framework. Create web apps with Razor Pages, MVC, or Single Page Apps (SPA) using Angular, React, or React * Redux. ma cas 81azor App Windows Coud Semi ce Web n Project templates for creating Blazor apps that that run on the server in an ASP.NET Core app or in the browser on WebAssembIy. These templates can be used to build web apps with rich dynamic user interfaces (UIs). Linux macOS Windcms Coud Web Class Library (.NET Standard) A project for creating a class library that targets .NET Standard. C# Android iOS Azure Functions Linux macOS Windcms ibrary A template to create an Azure Function project. Azure Coud

 

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

Configure your new project ASP.NET Core Web Application L Inux Project name Routine.Api Location o Solution name Routine Place solution and project in the same directory macOS Windcwvs Coud Service Web

 

然后選擇ASP.NET Core的專案模板: 

Create a .NET Core Empty An empty new ASP.NET Core web application ASP .NET 3.0 ect template for creating an ASP .NET Core application. This template does not have any content in it. A project template for creating an ASP .NET Core application with an example Controller for a RESIfuI HITP service. This template can also be used for ASP .NET Core MVC Views and Controllers. Web Application A project template for creating an ASP NET Core application with example ASP NET Razor Pages content. Web Application (Model-View-Controller) A project template for creating an ASP .NET Core application with example ASP .NET Core MVC Views and Controllers. This template can also be used for RESIfuI HITP services. o Angular A project template for creating an ASP .NET Core application with Angular React.js A project template for creating an ASP NET Core application with React.js Get additional project templates Authentication No Authentication Change Adv ced Configure for HITPS Enable Docker Support (Requires Docker Desktop) Linux Author: Microsoft Source: .NET Core 3.010 Create

首先要選擇ASP.NET Core 3.0 

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

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

 

解剖 ASP.NET Core 3.0 API 模板專案 

點擊Create,專案就建立好了: 

Solution 'Routine' (I of I project) Routine-Api Connected Services Dependencies Analyzers •@ Frameworks properties launchSettingsjson Controllers c* WeatherForecastControIIer.cs appsettingsjson C" C" C" appsettings.DeveIopmentjson Program.cs Startup.cs WeatherForecast.cs

 

先看看 appsettings.json 

Routine.Api appsettings.json -E X Schema: http://json.schemastore.org/appsettings 2 8' "Logging" • "LogLevel": "Default": "Information" , 4 "Microsoft": "Warning", 5 "Microsoft. Hosting. Lifetime": "Information" 6 7 8 "AllowedHosts": 9 10 11

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

 

appsettings.Development.json里面: 

appsettings.json appsettings.DeveIopment.json -E X Schema: http://json.schemastore.org/appsettings 2 8' "Logging" • "LogLevel": "Default": Routine.Api 4 5 6 7 8 9 10 "Debug" , "System": "Information" , "Microsoft": "Information"

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

 

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

 

專案模板里還有兩個類我們不需要,所以把它刪掉,分別是WeatherForecastControllerWeatherForecast 

Routine.Api C" C" C" Connected Services Dependencies Analyzers •@ Frameworks Properties launchSettingsjson Controllers C* WeatherForecastControIIer.cs appsettings.json appsettings.DeveIopmentjson Program.cs Startup.cs Weather Forecast.cs

 

Program.cs 

public class Program public static void Main(stringC] args) CreateHostBuilder(args) . Build( ) . Run( ) ; public static IHostBuilder CreateHostBuilder(string[] args) Host. CreateDefaultBuilder(args) . ConfigureWebHostDefaults(webBuilder webBuilder . ) ; D;

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

由于這是一個Web專案,所以我們還需要一個宿主(Host),這個宿主就是由下面的CreateHostBuilder方法來負責創建的,該方法首先會創建出一個實作了IHostBuilder介面的類(HostBuilder)的實體,然后呼叫它的Build方法來創建宿主(型別為Host,實作了IHost介面),最后呼叫宿主上面的Run方法來運行程式, 

 

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

public static IHostBuilder CreateHostBuilder(string[] args) Host . CreateDefaul tBuilder( args) . ConfigureWebHostDefaults(webBuilder webBuilder . ) ;

所以我們來看看Startup類, 

 

Startup.cs 

在這個類的建構式里: 

public class Startup O references public Startup(IConfiguration configuration) Configuration = configuration; I reference Configuration { get; public IConfiguration

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

 

下面有一個ConfigureServices方法: 

O references public void ConfigureServices(IServiceCollection services) services .AddControIIers( ) ;

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/5908.html

標籤:ASP.NET

上一篇:在IIS中如何設定域名

下一篇:.net webapi跨域問題

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more