C#(ASP.Net Core) で dotnet-cli を使用して WebAPIを構築してみます。
プロジェクトを作成する
プロジェクトを新規に作成します。
以下のコマンドでプロジェクトの種類を検索してみます。
dotnetnew--listTemplatesShortNameLanguageTags----------------------------------------------------------------------------------------------------------------------------------ConsoleApplicationconsole[C#], F#, VB Common/ConsoleClasslibraryclasslib[C#], F#, VB Common/LibraryWPFApplicationwpf[C#] Common/WPFWPFClasslibrarywpflib[C#] Common/WPFWPFCustomControlLibrarywpfcustomcontrollib[C#] Common/WPFWPFUserControlLibrarywpfusercontrollib[C#] Common/WPFWindowsForms(WinForms)Applicationwinforms[C#] Common/WinFormsWindowsForms(WinForms)Classlibrarywinformslib[C#] Common/WinFormsWorkerServiceworker[C#] Common/Worker/WebUnitTestProjectmstest[C#], F#, VB Test/MSTestNUnit3TestProjectnunit[C#], F#, VB Test/NUnitNUnit3TestItemnunit-test[C#], F#, VB Test/NUnitxUnitTestProjectxunit[C#], F#, VB Test/xUnitRazorComponentrazorcomponent[C#] Web/ASP.NETRazorPagepage[C#] Web/ASP.NETMVCViewImportsviewimports[C#] Web/ASP.NETMVCViewStartviewstart[C#] Web/ASP.NETBlazorServerAppblazorserver[C#] Web/BlazorBlazorWebAssemblyAppblazorwasm[C#] Web/Blazor/WebAssemblyASP.NETCoreEmptyweb[C#], F# Web/EmptyASP.NETCoreWebApp(Model-View-Controller)mvc[C#], F# Web/MVCASP.NETCoreWebAppwebapp[C#] Web/MVC/Razor PagesASP.NETCorewithAngularangular[C#] Web/MVC/SPAASP.NETCorewithReact.jsreact[C#] Web/MVC/SPAASP.NETCorewithReact.jsandReduxreactredux[C#] Web/MVC/SPARazorClassLibraryrazorclasslib[C#] Web/Razor/Library/Razor Class LibraryASP.NETCoreWebAPIwebapi[C#], F# Web/WebAPIASP.NETCoregRPCServicegrpc[C#] Web/gRPCdotnetgitignorefilegitignoreConfigglobal.jsonfileglobaljsonConfigNuGetConfignugetconfigConfigDotnetlocaltoolmanifestfiletool-manifestConfigWebConfigwebconfigConfigSolutionFileslnSolutionProtocolBufferFileprotoWeb/gRPC今回作成したい WebAPIのプロジェクトは WebAPIということが分かりましたので、以下のコマンドでプロジェクトを作成します。
dotnetnewwebapi--namewbapiwb.sqlte という SQLite のファイルを元にスキャフォールディングしましたので、以降の内容はプロジェクトフォルダに wb.sqlte というファイルがある前提で記述しています。
必要なツールをインストールする
1.Entity Framework Core ツールのインストール
以下のコマンドでインストーるします。
グローバルにインストールします。
dotnettoolinstall--globaldotnet-ef既にインストールしている場合は以下のコマンドで最新にします。
dotnettoolupdate--globaldotnet-efdotnetefで
_/\__---==/\\______|.\|\|__||__||)\\\|_||_|\_/|//|\\|___||_|/\\\/\\EntityFrameworkCore.NETCommand-lineTools3.1.6Usage:dotnetef[options][command]Options:--versionShowversioninformation-h|--helpShowhelpinformation-v|--verboseShowverboseoutput.--no-colorDon't colorize output.
--prefix-output Prefix output with level.
Commands:
database Commands to manage the database.
dbcontext Commands to manage DbContext types.
migrations Commands to manage migrations.
Use "dotnet ef [command] --help" for more information about a command.
という表示がされれば成功です。
2.aspnet-codegenerator のインストール
以下のコマンドでインストールします。
dotnettoolinstall--globaldotnet-aspnet-codegenerator既にインストールしている場合は以下のコマンドで最新にします。
dotnettoolupdate--globaldotnet-aspnet-codegeneratornuget パッケージのインストール
以下のコマンドでそれぞれインストールします。
dotnetaddpackageMicrosoft.EntityframeworkCore.DesigndotnetaddpackageMicrosoft.EntityframeworkCore.SqlitedotnetaddpackageMicrosoft.VisualStudio.Web.CodeGeneration.DesigndotnetaddpackageMicrosoft.EntityFrameworkCore.SqlServerMicrosoft.EntityframeworkCore.Design
この後出てくる dotnet ef コマンドでデータベースからモデルを作成する際に使用します。Microsoft.EntityframeworkCore.Sqlite
今回のプログラムはデータベースにSQLiteを使用します。
他のDBMSを使用する場合はDBMSに合ったパッケージに変更するだけです。Microsoft.VisualStudio.Web.CodeGeneration.Design
この後出てくる dotnet aspnet-codegenerator コマンドでモデルからコントローラーを作成する際に使用します。dotnet add package Microsoft.EntityFrameworkCore.SqlServer
正直なぜ必要なのか分かりませんが、無いと dotnet aspnet-codegenerator コマンドでエラーになったため、インストールしました。
データベースからモデルの作成
以下のコマンドを実行します。
dotnetefdbcontextscaffold"Data Source=wb.sqlite"Microsoft.EntityframeworkCore.Sqlite-oModels-o オプションは出力ディレクトリを指定します。
モデルからコントローラーの作成
以下のコマンドを実行します。
dotnetaspnet-codegeneratorcontroller-namewbController-async-api-mWb-dcwbContext-outDirControllers-name コントローラーの名前
-async async
-api api
-m Wb モデルクラス
-dc DBコンテキスト
-outDir 出力ディレクトリ
Startup に DBコンテキストを追加する処理を記述
Startup.cs の ConfigureServices メソッドに以下を追記します。
publicvoidConfigureServices(IServiceCollectionservices){services.AddControllers();services.AddDbContext<Models.wbContext>();//この行}launchSettings.jsonの編集
launchSettings.json の launchUrl を今回作成した COntrollerにルーティングされるよう修正します。
具体的には launchUrl の部分です。
"sample2":{"commandName":"Project","launchBrowser":true,"launchUrl":"api/wb","applicationUrl":"https://localhost:9999;http://localhost:9998","environmentVariables":{"ASPNETCORE_ENVIRONMENT":"Development"}}以上で終了です。
実行するとブラウザで WebAPI より取得した json が表示されると思います。
最後に
今回使用したコマンドをまとめておきます。
dotnettoolupdate--globaldotnet-efdotnetaddpackageMicrosoft.EntityframeworkCore.DesigndotnetaddpackageMicrosoft.EntityframeworkCore.Sqlitedotnetefdbcontextscaffold"Data Source=wb.sqlite"Microsoft.EntityframeworkCore.Sqlite-oModelsdotnettoolinstall--globaldotnet-aspnet-codegeneratordotnetaddpackageMicrosoft.VisualStudio.Web.CodeGeneration.DesigndotnetaddpackageMicrosoft.EntityFrameworkCore.SqlServerdotnetaspnet-codegeneratorcontroller-namewbController-async-api-mWb-dcwbContext-outDirControllers