【ASP.NET Web API】参考資料(サイト/書籍)のまとめ

# はじめに

下記の状況のなか、ASP.NET Web APIを初めて学ぶことになった（仕事の都合）。情報量が少なく、情報収取で苦労したため、資料として残す。

* ASP.NET Coreがスタンダードで、ASP.NET Web APIは今から学ぶ価値があまりない。下記のような記事が存在するほど。
　[Asp.Net Web Api is dead, long live Asp.Net Core](https://koukia.ca/asp-net-web-api-is-dead-long-live-asp-net-core-bd852de1369d)
* ASP.NET Web APIの情報量は、ASP.NET Coreに比べると情報が少ない。
* Microsoftのドキュメントも、メンテナンスが不十分でリンクが所々使えない。 

# 役立ったサイト

| No | 名称 | 概要 | 備考 |
|:-|:-|:-|:-|
|1   |[Web API のガイダンス](https://docs.microsoft.com/ja-jp/aspnet/web-api/overview/)   |Microsoft社の公式ドキュメント。   |必要な情報は概ね揃っている。<br>所々記事のリンクが使えなくなっているのが、問題点。|
|2   |[ASP.NET WEB API2:HTTP MESSAGE LIFECYLE](https://www.asp.net/media/4071077/aspnet-web-api-poster.pdf)   |Microsoft社のポスター。  |フレームワーク内でHTTPメッセージをどのようにハンドリングしているか解説したポスター。<br>初めに読むとフレームワークの処理の流れを大雑把につかめる。|
|3   |[連載：ASP.NET Web API 入門](https://www.atmarkit.co.jp/ait/subtop/features/dotnet/aspwebapi_index.html) |@ITのASP.NET Web APIの紹介記事。   |一番はじめの取っ掛かりには有用だった。<br>Microsoft社の公式ガイダンスをかじった後だと物足りない。   |

# 役に立った書籍

| No | 書籍名 | 備考 |
|:-|:-|:-|
|1   |[ASP.NET Web API 2 Recipes: A Problem-Solution Approach (Recipes Apress)](https://www.amazon.co.jp/gp/product/1430259809/ref=ppx_yo_dt_b_asin_title_o06_s00?ie=UTF8&psc=1) |問題点と解決するためのコードサンプルがセットになった本。<br/>[サンプルコード](https://github.com/Apress/asp.net-web-api-2-recipes)|

# 知見者のサイト

| No | 名称 | 概要 | 備考 |
|:-|:-|:-|:-|
|1   |[miso_soup3さんBlog](https://miso-soup3.hateblo.jp/archive/category/ASP.NET%20Web%20API)   |miso_soup3さんの個人ブログ |知りたい情報が明確化になっていて、公式以外の情報を知りたい場面なら役立ちそう。|
|2   |[TonyTonyKunさんBlog](https://gooner.hateblo.jp/archive/category/ASP.NET%20Web%20API)   |TonyTonyKunさんの個人ブログ |実装が参考になった。multipart形式の画像アップロードなど情報が少ないものを解説しているのも助かる。|

# コードサンプル

| No | 名称 | 概要 | 備考 |
|:-|:-|:-|:-|
|1|[MSDN Code Gallery Microsoft Samples](https://github.com/microsoftarchive/msdn-code-gallery-community-a-c) |MSDNのソースコードの公開されている。|ただし、Githubからソースサンプルをzipでダウンロードしても開けない。<br>ファイル欠損しているか、容量が大きすぎるためと思われる。|
|2   |[Git:SampleCode](https://github.com/aspnet/samples/tree/main/samples/aspnet/WebApi)   |Microsoft ASP.NETのリポジトリ   |サンプルコードが多数ある。   |

# トピック

## モデル検証

| No | 参考資料 | 説明 |
|:-|:-|:-|
|1   |[ASP.NET Web API でのモデル検証](https://docs.microsoft.com/ja-jp/aspnet/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api)|Microsoft公式ページ。|
|2   |[Creating Your Own Validation Attribute In MVC And Web API 2.0](https://www.c-sharpcorner.com/article/creating-your-own-validation-attribute-in-web-api-and-mvc/)|C# Cornerの記事。<br>検証の属性に関する記事。|
|3   |[Web API Validation](https://www.c-sharpcorner.com/article/learn-about-web-api-validation/)|C# Cornerの記事。<br>カスタム検証属性の実装方法が2つ紹介されている。<br>1. IValidatableObjectを使用した方法<br>2. OSS Fluent Validationを使用する方法|


## Swaggerの適用方法

| No | 参考資料 | 説明 |
|:-|:-|:-|
|1   |[【連載】ASP.NET Web API を使おう：第2回 Swaggerを適用する](https://www.nuits.jp/entry/web-api-apply-swagger)   |Microsoft MVP 中村さんの書いた記事。<br>2018-02-13  |
|2   |[Swagger を使った ASP.NET Web API のドキュメント生成](https://miso-soup3.hateblo.jp/entry/2014/12/17/233409)   |miso_soupさんが書いた記事。<br>swagger適用に関する仕組みが分かりやすく解説されている。<br>2014-12-17   |
|3   |[Swashbuckle Swagger Integration In WebApi 2](https://www.c-sharpcorner.com/article/swagger-integration-with-webapi-2-in-mvc/)   |米国のC#コミュニティ　C## Cornerに掲載されていた記事。   |
|4   |[Swagger公式ページ](https://swagger.io/specification/)   |OpenAPI仕様の公式ページ。<br>[Gitのページ](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md)|
|5|[Git :Swaggerパッケージ](https://github.com/domaindrivendev/Swashbuckle.WebApi)|Swaggerのパッケージ Swashbuckleのページリンク|

## multipart/form-dataをWeb APIに組み込む

| No | 参考資料 | 説明 |
|:-|:-|:-|
|1   |[ASP.NET Web API で multipart / form-data を使ってファイルをアップロードする](https://gooner.hateblo.jp/entry/2014/04/23/multipart/)|multipart / form-dataを用いて、クライアントからサーバに画像をアップロードする実装が記載されている。|

#### JSON.NET(Newtonsoft.Json)

| No | リンク | 備考 |
|:-|:-|:-|
|1   |[公式ドキュメント](https://www.newtonsoft.com/json/help/html/Introduction.htm) |   |
|2   |[JSONデータを作成／解析するには？](https://atmarkit.itmedia.co.jp/ait/articles/1709/13/news018.html)   |わかりやすい記事|
|3   |[C# の Json.NET を理解する](https://qiita.com/TsuyoshiUshio@github/items/4f497bfdd660a3142561)   |Qiitaの解説記事|