| 價值觀 | |
|---|---|
| 規則識別碼 | 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) => {});
隱藏警告的時機
請勿忽略依據這個規則的警告。 參數選擇性不匹配可能導致執行時路由出現意外行為。