共用方式為


ASP0007:路由參數與參數的可選性不匹配

價值觀
規則識別碼 ASP0007
類別 Usage
修正是破壞性或非破壞性 Non-breaking

原因

路由參數在代理定義中宣告為必需,但在端點路由中標記為可選。

規則描述

當端點被宣告時,參數的選擇性可以在路由範本和路由處理程序參數中宣告。 當參數在處理程序中宣告為可選時,該參數也必須在路由模板中宣告為可選。 例如,GET /todos 無法解析以下程式碼的匹配:

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

前一程式碼因未提供參數而無法匹配 GET /todosid ,儘管在路由處理程序中該參數被視為可選。

如何修正違規

若要修正違反此規則,請確保路由範本中的選擇性與委派匹配。 例如,以下程式碼範例:

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

若該參數是必須的,則從?中的int?移除,以將型別設為不可為空值:

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

若參數為可選,則應套用 可空值類型 運算子 ?

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

隱藏警告的時機

請勿忽略依據這個規則的警告。 參數選擇性不匹配可能導致執行時路由出現意外行為。