ASP.NET Coreを使用したWeb APIチュートリアルの作成
ASP.NET Coreを使用したWeb APIの作成
この投稿は、Tutorial: Create a web API with ASP.NET Core | Microsoft Docsチュートリアルを学習して作成された抜粋です.
Webプロジェクトの作成
モデルクラスの追加
データベースコンテキストの追加
TodoContextデータベースコンテキストの追加
データベースコンテキストの登録
コントローラカスケード
リスニングに必要なNuGetパッケージの追加
カスケードエンジンのインストール
scaffold
PostTooItem createメソッドの変更
Controller/TodoItemsController.cs
修正[HttpPost]
public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem)
{
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
//return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem);
}
[HttpPost]レポート付きHTTP POSTメソッド
HTTPリクエストマスターからto-do itemの値を取得します.
CreatedAtAction
メソッド成功した場合、HTTP 201 status code
回答に
Location
のヘッダーを付けます.このタイトルは、新しく作成されたto-do itemのURIを指定します.ハードコーディングを回避するために、
"GetTodoItem"
からnameof
のキーワードが使用される.http-replインストール
ツールをインストールしてWeb APIをテストします.
dotnet tool install -g Microsoft.dotnet-httprepl
PostTooItemのテスト
テスト
ローカルヘッダURIのテスト
postに入力したばかりの情報は1になりgetがインポートされます.
GETメソッドテスト
GETエンドポイントには2つの実装がある.
GET /api/todoitems
GET /api/todoitems/{id}
完全なjsonリストが出力されます.
このアプリケーションは現在、メモリをデータベースとしています.アプリケーションが中断して再起動すると、以前に保存したPOSTデータは消えます.
ルーティングとURLパス
Controller/TodoItemsController.cs
修正[Route("api/[controller]")]
[ApiController]
public class TodoItemsController : ControllerBase
[controller]
部は、コントローラクラスの名前として慣例に従って指定される.李大钊コントローラという文字列を削除します.このアプリケーションの名前は「TodoItems」です.If the
[Http![G]()et]
attribute has a route template (for example, [HttpGet("products")]
), append that to the path. This sample doesn't use a template.戻り値
GetTodoItems
およびGetTodoItem
メソッドの戻り値データ型はActionResult<T>
型である.ASP.NET Coreは、オブジェクトを自動的にJSON(シーケンス化)にシリアル化し、JSONに応答するメッセージボディに書き込む.
この返されるデータ型のレスポンスコードは200 OKです.未処理のエラーに対して、5 xxコードが生成されます.
ActionResult
戻りタイプは、広範なHTTP状態コードを表すことができる.例えば、GetTodoItem
という2つの異なる状態値を返すことができる.item
HTTP 200は、返信結果に応答する.PutTooItemメソッド
HTTP putメソッドを見てみましょう.
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(long id, TodoItem todoItem)
{
if (id != todoItem.Id)
{
return BadRequest();
}
_context.Entry(todoItem).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!TodoItemExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
前に見たPOSTに似ています.通常運転時応答は204(No Content)です.HTTP詳細によれば、PUT要求は、変更部分だけでなく、要求全体を変更することを要求する.ローカルアップデートはHTTP PATCHを使用します.
後でテスト中にエラーが発生した場合は、GETで現在のデータベースにその項目が含まれているかどうかを確認します.
DELETEテスト
省略
過剰投入防止
現在のサンプル・アプリケーションには、
TodoItem
オブジェクトがすべて表示されています.本番アプリケーションは、通常、入力されたデータとモデルの一部として表示されるデータを制限します.いくつかの原因がありますが、警備員が最大の原因です.モデルの一部は主にDTO(データ転送対象データ転送モデル)または入力モデル、ビューモデルと呼ばれる.この紙はDTOと呼ばれています.DTOはこういう時に使います.
オーバーポジション防止
クライアントに表示したくない属性を非表示にする場合
属性を省略して負荷寸法を小さくする
ネストされたオブジェクトを含むオブジェクト図を展開するとき.フラットなオブジェクトマップは、クライアントに便利です.
DTOコードの変更
チュートリアルに従ってコードを変更します.
secretフィールドがPOST、GETできるかどうかを確認します.
post -h Content-Type=application/json -c "{"name":"walk dog","isComplete":true, "Secret":"oh"}
結果は以下の通りです.HTTP/1.1 400 Bad Request
Content-Type: application/problem+json; charset=utf-8
Date: Thu, 02 Dec 2021 08:02:04 GMT
Server: Kestrel
Transfer-Encoding: chunked
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "00-7eda8bec404c05b9f14b90096c3b4d6f-94d2def71d17f9e0-00",
"errors": {
"$": [
"The JSON value could not be converted to TodoApi.Models.TodoItemDTO. Path: $ | LineNumber: 0 | BytePositionInLine: 3."
],
"todoItemDTO": [
"The todoItemDTO field is required."
]
}
}
失敗!これでWeb APIの作成が完了します.
勉強しなければならないこともあります.
JavaScriptを使用してWeb APIを呼び出す
チュートリアル:JavaScriptを使用してASPを記述します。NET Core Web API呼び出しを参照してください.
認証サポートをWeb APIに追加
ASP.NET Core IDはASPです.NT Core Webアプリケーションにユーザインタフェース(UI)ログイン機能を追加します.Web APIとSPAを保護するには、次のいずれかのオプションを使用します.
Reference
この問題について(ASP.NET Coreを使用したWeb APIチュートリアルの作成), 我々は、より多くの情報をここで見つけました https://velog.io/@0008mari/ASP.NET-Core로-웹-API-만들기-튜토리얼テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol