ASP0007: ルート パラメーターと引数の省略可能性が一致しない

Value
ルール ID ASP0007
[カテゴリ] 使用法
修正が中断ありか中断なしか なし

原因

ルート パラメーターは、デリゲート定義では必須として宣言されますが、エンドポイント ルートでは省略可能としてマークされます。

規則の説明

エンドポイントが宣言されている場合、パラメーターの省略可能性はルート テンプレートとルート ハンドラー引数の両方で宣言できます。 パラメーターがハンドラーで省略可能として宣言されている場合は、ルート テンプレートでも省略可能として宣言する必要があります。 たとえば、GET /todos は次のコードについて一致の解決に失敗します。

app.MapGet("/todos/{id}", (int? id) => {});

上記のコードは、id パラメーターが指定されていないため、これはルート ハンドラーでは省略可能として扱われていますが、GET /todos の一致に失敗します。

違反の修正方法

このルールの違反を修正するには、ルート テンプレートとデリゲートの省略可能性が一致していることを確認します。 たとえば、次のコード サンプルでは:

app.MapGet("/todos/{id}", (int? id) => {});

このパラメーターを必須にすることを意図している場合は、次のように int? から ? を削除することで型を null 非許容にします。

app.MapGet("/todos/{id}", (int id) => {});

このパラメーターを省略可能にすることを意図している場合は、次のように null 許容値型演算子 ? を適用する必要があります。

app.MapGet("/todos/{id?}", (int? id) => {});

どのようなときに警告を抑制するか

このルールからの警告は抑制 "しない" でください。 パラメーターの省略性が一致しない場合、実行時のルーティングで予期しない動作が発生する可能性があります。