ASP.NET Core 中的 Razor Pages 授權慣例

在 Razor Pages 應用程式中控制存取權的其中一種方式,就是在啟動時使用授權慣例。 這些慣例可讓您授權使用者,並允許匿名使用者存取頁面的個別頁面或資料夾。 本主題所述的慣例會自動套用授權篩選條件來控制存取。

檢視或下載範例程式碼 \(英文\) (如何下載)

範例應用程式使用cookie驗證,無需 ASP.NET CoreIdentity。 本主題中顯示的概念和範例同樣適用於使用 ASP.NET Core Identity 的應用程式。 要使用ASP.NET Core Identity,請遵循 關於ASP.NET Core 的 Identity 簡介中的指引。

需要授權才能存取頁面

使用 AuthorizePage 慣例,將 AuthorizeFilter 新增至指定路徑的頁面:

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

指定的路徑是 View Engine 路徑,這是沒有延伸模組且只包含正斜線的 Razor 頁面根相對路徑。

若要指定授權原則,請使用 AuthorizePage 多載

options.Conventions.AuthorizePage("/Contact", "AtLeast21");

注意

AuthorizeFilter 可以套用至具有 [Authorize] 篩選屬性的頁面模型類別。 如需詳細資訊,請參閱授權篩選屬性

需要授權才能存取頁面的資料夾

使用 AuthorizeFolder 慣例,將 AuthorizeFilter 新增至指定路徑資料夾中的所有頁面:

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

指定的路徑是 View Engine 路徑,也就是 Razor 頁面根相對路徑。

若要指定授權原則,請使用 AuthorizePage 多載

options.Conventions.AuthorizeFolder("/Private", "AtLeast21");

需要授權才能存取區域頁面

使用 AuthorizeAreaPage 慣例,將 AuthorizeFilter 新增至指定路徑的區域頁面:

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");

頁面名稱是檔案的路徑,沒有相對於指定區域之頁面根目錄的副檔名。 例如,檔案 Areas/Identity/Pages/Manage/Accounts.cshtml 的頁面名稱是 /Manage/Accounts

若要指定授權原則,請使用 AuthorizeAreaPage 多載

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");

需要授權才能存取區域的資料夾

使用 AuthorizeAreaFolder 慣例,將 AuthorizeFilter 新增至指定路徑資料夾中的所有區域:

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");

資料夾路徑是資料夾相對於指定區域之頁面根目錄的路徑。 例如,在 Areas/Identity/Pages/Manage/ 下檔案的資料夾路徑是 /Manage

若要指定授權原則,請使用 AuthorizeAreaFolder 多載

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");

允許匿名存取頁面

使用 AllowAnonymousToPage 慣例,將 AllowAnonymousFilter 新增至指定路徑的頁面:

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

指定的路徑是 View Engine 路徑,這是沒有延伸模組且只包含正斜線的 Razor 頁面根相對路徑。

允許匿名存取頁面的資料夾

使用 AllowAnonymousToFolder 慣例,將 AllowAnonymousFilter 新增至指定路徑資料夾中的所有頁面:

services.AddRazorPages(options =>
{
    options.Conventions.AuthorizePage("/Contact");
    options.Conventions.AuthorizeFolder("/Private");
    options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
    options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});

指定的路徑是 View Engine 路徑,也就是 Razor 頁面根相對路徑。

合併授權和匿名存取的注意事項

指定頁面資料夾需要授權,然後指定該資料夾中的頁面允許匿名存取是有效的:

// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")

不過,反轉無效。 您無法宣告頁面的資料夾進行匿名存取,然後指定該資料夾內需要授權的頁面:

// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")

在 [私人] 頁面上要求授權失敗。 當 AllowAnonymousFilterAuthorizeFilter 同時套用至頁面時,AllowAnonymousFilter 會優先控制存取權。

其他資源

在 Razor Pages 應用程式中控制存取權的其中一種方式,就是在啟動時使用授權慣例。 這些慣例可讓您授權使用者,並允許匿名使用者存取頁面的個別頁面或資料夾。 本主題所述的慣例會自動套用授權篩選條件來控制存取。

檢視或下載範例程式碼 \(英文\) (如何下載)

範例應用程式使用cookie驗證,無需 ASP.NET CoreIdentity。 本主題中顯示的概念和範例同樣適用於使用 ASP.NET Core Identity 的應用程式。 要使用ASP.NET Core Identity,請遵循 關於ASP.NET Core 的 Identity 簡介中的指引。

需要授權才能存取頁面

透過 AddRazorPagesOptions 使用 AuthorizePage 慣例,將 AuthorizeFilter 新增至指定路徑的頁面:

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

指定的路徑是 View Engine 路徑,這是沒有延伸模組且只包含正斜線的 Razor 頁面根相對路徑。

若要指定授權原則,請使用 AuthorizePage 多載

options.Conventions.AuthorizePage("/Contact", "AtLeast21");

注意

AuthorizeFilter 可以套用至具有 [Authorize] 篩選屬性的頁面模型類別。 如需詳細資訊,請參閱授權篩選屬性

需要授權才能存取頁面的資料夾

透過 AddRazorPagesOptions 使用 AuthorizeFolder 慣例,將 AuthorizeFilter 新增至指定路徑資料夾中的所有頁面:

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

指定的路徑是 View Engine 路徑,也就是 Razor 頁面根相對路徑。

若要指定授權原則,請使用 AuthorizePage 多載

options.Conventions.AuthorizeFolder("/Private", "AtLeast21");

需要授權才能存取區域頁面

透過 AddRazorPagesOptions 使用 AuthorizeAreaPage 慣例,將 AuthorizeFilter 新增至指定路徑的區域頁面:

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");

頁面名稱是檔案的路徑,沒有相對於指定區域之頁面根目錄的副檔名。 例如,檔案 Areas/Identity/Pages/Manage/Accounts.cshtml 的頁面名稱是 /Manage/Accounts

若要指定授權原則,請使用 AuthorizeAreaPage 多載

options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");

需要授權才能存取區域的資料夾

透過 AddRazorPagesOptions 使用 AuthorizeAreaFolder 慣例,將 AuthorizeFilter 新增至指定路徑資料夾中的所有區域:

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");

資料夾路徑是資料夾相對於指定區域之頁面根目錄的路徑。 例如,在 Areas/Identity/Pages/Manage/ 下檔案的資料夾路徑是 /Manage

若要指定授權原則,請使用 AuthorizeAreaFolder 多載

options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");

允許匿名存取頁面

透過 AddRazorPagesOptions 使用 AllowAnonymousToPage 慣例,將 AllowAnonymousFilter 新增至指定路徑的頁面:

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

指定的路徑是 View Engine 路徑,這是沒有延伸模組且只包含正斜線的 Razor 頁面根相對路徑。

允許匿名存取頁面的資料夾

透過 AddRazorPagesOptions 使用 AllowAnonymousToFolder 慣例,將 AllowAnonymousFilter 新增至指定路徑資料夾中的所有頁面:

services.AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AuthorizePage("/Contact");
        options.Conventions.AuthorizeFolder("/Private");
        options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
        options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

指定的路徑是 View Engine 路徑,也就是 Razor 頁面根相對路徑。

合併授權和匿名存取的注意事項

指定頁面資料夾需要授權,然後指定該資料夾中的頁面允許匿名存取是有效的:

// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")

不過,反轉無效。 您無法宣告頁面的資料夾進行匿名存取,然後指定該資料夾內需要授權的頁面:

// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")

在 [私人] 頁面上要求授權失敗。 當 AllowAnonymousFilterAuthorizeFilter 同時套用至頁面時,AllowAnonymousFilter 會優先控制存取權。

其他資源