ASP0005: 不要將屬性放在路由處理常式 Lambda 所呼叫的方法上

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

原因

屬性已套用至方法定義,而不是路由處理常式端點中的路由處理常式。

檔案描述

宣告端點時,屬性應該套用至委派參數,才能生效。 例如,下列程式碼範例中的 授權 屬性未在已註冊的端點上設定:

app.MapGet("/todos/{id}", GetTodoById);

[Authorize]
Todo GetTodoById(int id)
{
  ...
}

屬性必須放在路由處理常式參數上,如下列程式碼所示:

app.MapGet("/todos/{id}", [Authorize] GetTodoById);

Todo GetTodoById(int id)
{
  ...
}

如何修正違規

若要修正此規則的違規,請確定端點屬性已套用至路由處理常式參數:

app.MapGet("/todos/{id}", [Authorize] (int id) => {});
app.MapGet("/users/{id}", [Authorize] GetUserById);

隱藏警告的時機

請勿隱藏此規則的警告。 錯放的屬性可能會導致執行階段發生非預期的行為。