github Source code #tag: web_api
本文將記錄如何一步步從無到有使用 Dotnet Core 5.0 建立 ASP.NET Core 5 Web API,其中將會使用到下列技術:
- Dotnet cli
- Entity Framework
- Sqlite
- ASP.NET Core Generator
使用 dotnet cli 建立專案
$ dotnet --version # 檢查 dotnet 版本,目前版本為: 5.0.201
$ dotnet new webapi -n "Todo5" && cd "Todo5"
$ ls # 查看 專案檔案結構
$ dotnet new gitignore # 使用 dotnet cli 來產生預設的 git ignore 檔案
建立 git 初始版本
$ git init && git add . && git commit -m "Initial commit"
安裝本機工具
此方式安裝的工具,僅限本機存取(只針對目前的目錄和子目錄), 首先透過 dotnet new tool-manifest 命令來產生工具資訊清單檔,再使用 dotnet tool install 來安裝各式工具程式。這樣的方式好處是在專案若多人協助方式時,則可利用 dotnet tool restore 命令將紀錄在 .config/dotnet-tools.json 的工具資訊清單檔重建在不同協助人員的電腦中。
$ dotnet new tool-manifest #會產生 .config/dotnet-tools.json 檔案
$ dotnet tool install dotnet-ef --version 5.0.13 #使用 local 安裝方式來安裝 Entity Framework 工具
$ dotnet tool install dotnet-aspnet-codegenerator --version 5.0.2 #使用 local 安裝方式來安裝 Code Generator 工具
$ cat .\.config\dotnet-tools.json # 查看安裝上述二項工具後的設定資訊
|
|
安裝程式使用的相關套件
$ dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 5.0.13 #Sqlite 使用的套件
$ dotnet add package Microsoft.EntityFrameworkCore.Tools --version 5.0.13 #使用 dotnet Entity Framework時必須安裝此套件
$ dotnet add package Microsoft.EntityFrameworkCore.Design --version 5.0.13 #使用 dotnet Entity Framework時必須安裝此套件
$ dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 5.0.13 #使用 dotnet Entity Framework時必須安裝此套件
$ dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design --version 5.0.2 #搭配 dotnet-aspnet-codegenerator 使用
安裝的程式套件資訊紀錄在 “專案”.csproj 檔案中
$ cat .\Todo5.csproj #查看 安裝套件的相關設定值
1<Project Sdk="Microsoft.NET.Sdk.Web">
2
3 <PropertyGroup>
4 <TargetFramework>net5.0</TargetFramework>
5 <RootNamespace>_5Todo</RootNamespace>
6 </PropertyGroup>
7
8 <ItemGroup>
9 <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.13">
10 <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
11 <PrivateAssets>all</PrivateAssets>
12 </PackageReference>
13 <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.13" />
14 <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.13" />
15 <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.13">
16 <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
17 <PrivateAssets>all</PrivateAssets>
18 </PackageReference>
19 <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="5.0.2" />
20 <PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
21 </ItemGroup>
22
23</Project>
建立 git 新版本
$ git add . && git commit -m "Add EFCore NuGet packages"
新增 database context (自動產生)
$ dotnet ef dbcontext scaffold "Data Source=app.db; Cache=Shared" Microsoft.EntityFrameworkCore.Sqlite -c ApiDbContext -o Data #在專案目錄 ./Data 子目錄下新建立一個 ApiDbContext.cs 的 DB Context file
$ dotnet run #可使用 dotnet watch run 命令來自動監控程式碼的變動
開啟瀏覽器查看以下網址 “https://localhost:5001/WeatherForecast”
|
|
開啟瀏覽器查看以下 Swagger 網址 “https://localhst:5001/swagger/index.html”
建立另一個 git 新版本
$ git add . && git commit -m "Create dbcontext classes using dotnet-ef"
Open VS Code
$ Code .
在 Models 目錄下新增一個 model(模型) class - ItemData
|
|
在 ApiDbContext.cs 中宣告一個 ItemData table
public DbSet<ItemData> ItemDatas { get; set; }
|
|
在 appsettings.json 檔案中新增 ConnectionString 設定資料
"ConnectionStrings": {
"DefaultConnection": "Data Source=app.db;Cache=Shared"
},
在 Startup.cs 檔案中註冊 database context (連絡到 Sqlite DB)
|
|
|
|
移除預設產生的樣本程式碼
Weather Forecast 程式碼是預設自動產生的,可直接將 WeatherForecast.cs & WeatherForecastController.cs 刪除
Add the initial migration to create the database
$ dotnet build
$ dotnet ef migrations add "Initial Migrations"
$ dotnet ef database update # 在根目錄產生 app.db sqlite database
使用 ASPNET Codegenerator 自動產生 Todo Controller
$ dotnet aspnet-codegenerator controller -name TodoController -async -api -m ItemData -dc ApiDbContext -outDir Controllers
執行 Swagger
開啟瀏覽器查看以下網址 “https://localhst:5001/swagger/index.html”
透過 POST Method 新增一筆資料
使用 GET Method 查詢資料