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) => {});
どのようなときに警告を抑制するか
このルールからの警告は抑制 "しない" でください。 パラメーターの省略性が一致しない場合、実行時のルーティングで予期しない動作が発生する可能性があります。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
ASP.NET Core