VSCodeと.NETCore2.2でWebAPIプロジェクトを作成

# 概要
- ソリューションの作成（ついで）
- WebAPIプロジェクトの作成
- 実行

# 環境
- LinuxMint 19.1
- .NET Core 2.2
- VSCode 1.33

実際に私が作業している環境の構築については以下を参照してください。

- [LinuxMintに.NET Core SDK 2.2とVisual Studio Codeをインストールする](https://qiita.com/pieceofwonder/items/0dff2963e3ff2f7cd216)
- [LinuxMint VSCodeとgithubを連携]
(https://qiita.com/pieceofwonder/items/6b1f6775b1f53241d7ec)

# ソリューションの作成
複数のプロジェクトの管理ができるソリューション（sln）が作成できるようなのでついでにそれもやってみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/277868/0143c778-c804-381a-3da6-5cfe134692b2.png)
空のリポジトリを作ったところからスタートです。

```sh:ソリューション作成コマンド
$ dotnet new sln
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/277868/db0cbbd0-cb66-f91e-439a-57763ee4b693.png)
フォルダ名と同名のslnファイルが作成されました。

```WebApiSample.sln
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26124.0
MinimumVisualStudioVersion = 15.0.26124.0
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Debug|x64 = Debug|x64
		Debug|x86 = Debug|x86
		Release|Any CPU = Release|Any CPU
		Release|x64 = Release|x64
		Release|x86 = Release|x86
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal
```

内容はこんな感じ

# WebAPIプロジェクトの作成
webapiフォルダを作成してその中にプロジェクトを作成します。

```sh:WebAPI作成コマンド
$ mkdir webapi
$ cd webapi
$ dotnet new webapi
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/277868/eac713f9-4ba9-e0cd-573d-f6b1662bfb51.png)
これでプロジェクトの作成はできましたがこれだけだとソリューションにこのプロジェクトが追加されないので`dotnet sln`コマンドでslnファイルに作成したプロジェクトを追加します。

```sh:プロジェクトの追加
$ dotnet sln ../WebApiSample.sln add webapi.csproj
```

```WebApiSample.sln
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "webapi", "webapi\webapi.csproj", "{D7546FD5-E5E5-4903-A12B-4F3C589A2D57}"
```

WebApiSample.slnを見てみると追加したプロジェクトの情報が色々と増えているようです。（上記以外にも結構増えていました）

`$ cd ../`でslnがあるフォルダに移動して`dotnet build`を実行してみます。

```sh:build
$ dotnet build
.NET Core 向け Microsoft (R) Build Engine バージョン 16.0.450+ga8dc7f1d34
Copyright (C) Microsoft Corporation.All rights reserved.

  /home/(ユーザー名)/VSCode/github/WebApiSample/webapi/webapi.csproj の復元が 67.63 ms で完了しました。
  webapi -> /home/(ユーザー名)/VSCode/github/WebApiSample/webapi/bin/Debug/netcoreapp2.2/webapi.dll

ビルドに成功しました。
    0 個の警告
    0 エラー

経過時間 00:00:05.61
```

slnに追加されているプロジェクトが一括でビルドできるようになりました。
プロジェクト1つだけではあまり意味はないですが後々クラスライブラリとか追加するのが簡単にできそうです。

# 実行
ちゃんとプロジェクトが読み込めていれば「デバッグの開始」時にlaunch.jsonを作ってくれるみたいです。
デバッグができるかどうか確認するためにValuesControllerのGetメソッドにブレークポイントを設定して実行してみます。

```c#:ValuesController.cs
        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            return new string[] { "value1", "value2" }; //←ココにブレークポイントを設定
        }
```

「デバッグの開始」で実行するとブラウザが立ち上がって`https://localhost:5001/`にアクセスしようとします。（ブラウザの証明書エラーがでた場合は無視して続行してください）
.NET CoreのWebAPIテンプレートではこのURLにはなにもないので404エラーのページが表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/277868/b55d02dc-2a1d-0590-ab13-5ded55c989f0.png)

ブラウザのアドレスバーに`https://localhost:5001/api/values`を入力してアクセスしてみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/277868/b66e67ed-ca1c-527d-3e46-c2d7d01601d5.png)
ブレークポイントで停止しました。デバッグはうまく動いているようです。
そのままF5で続行します。
ブラウザに`["value1","value2"]`が表示されました。
ここまでできれば後は好きなようにAPIを作ってサーバーに乗っけるだけですね。

# 最後に
Linuxに.NETCoreとVSCodeいれてWebAPIプロジェクトを作るところまでやってみました。
メモ書きレベルのものではありますが役に立てれば幸いです。

近いうちに.NETCore3.0が正式リリースされると思うのでそのときにバージョンアップする際のこととかで何かネタがあれば書くかも？