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 
  • HTTP 201は、HTTP POST方式の標準応答である.

  • 回答にLocationのヘッダーを付けます.このタイトルは、新しく作成されたto-do itemのURIを指定します.
  • URIとは?リソースを指す文字列.最も一般的なURIはURLです.

  • ハードコーディングを回避するために、"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}
  • 2つ目は前にやってみることです最初にやってみる
    完全なjsonリストが出力されます.
    このアプリケーションは現在、メモリをデータベースとしています.アプリケーションが中断して再起動すると、以前に保存したPOSTデータは消えます.

    ルーティングとURLパス

    Controller/TodoItemsController.cs修正
    [Route("api/[controller]")]
    [ApiController]
    public class TodoItemsController : ControllerBase
  • [controller]部は、コントローラクラスの名前として慣例に従って指定される.李大钊コントローラという文字列を削除します.このアプリケーションの名前は「TodoItems」です.
  • ASP.NET Coreのルーティング大文字小文字区別なし:大文字小文字区別x

  • 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つの異なる状態値を返すことができる.
  • 要求IDに一致するエントリがない場合、メソッドは404ステータス2NotFoundエラーコードを返します.
  • でなければ、方法はJSON応答本文付き200に戻る.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を保護するには、次のいずれかのオプションを使用します.
  • Azure Active Directory
  • Azure Active Directory B2C (Azure AD B2C)
  • アイデンティティーサーバ4
  • Identity Server 4はASPです.NET CoreのOpenID ConnectおよびOAuth 2.0フレームワークに適用します.Identity Server 4は、次のセキュリティ機能を有効にします.
  • 認証(AAS)
  • 複数のアプリケーションタイプのワンポイントログイン/シャットダウン
  • APIのアクセス制御
  • 連合ゲートウェイ
  • 詳細については、Identity Server 4の起動を参照してください.