Share via


ASP0007:路由參數和引數選擇性不符

規則識別碼 ASP0007
類別 使用方式
修正程式是中斷或非中斷 不中斷

原因

路由參數在委派定義中宣告為必要,但在端點路由中標示為選用。

檔案描述

宣告端點時,可以在路由範本和路由處理常式引數中宣告參數的選擇性。 當參數在處理常式中宣告為選用時,也必須在路由範本中宣告為選用。 例如,GET /todos 無法解析下列程式碼的相符項目:

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

上述程式碼無法比對 GET /todos,因為未提供 id 參數,即使它在路由處理常式中被視為選用亦然。

如何修正違規

若要修正此規則的違規,請確定路由範本和委派中的選擇性相符。 例如,針對下列程式碼範例:

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

如果參數預期是必要,請從 int? 移除 ?,使型別不可為 Null:

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

如果參數預期是選用,則應該套用可為 Null 的實值型別運算子 ?

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

隱藏警告的時機

隱藏此規則的警告。 不相符的參數選擇性會在執行階段的路由導致非預期的行為。