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")
在 [私人] 頁面上要求授權失敗。 當 AllowAnonymousFilter 和 AuthorizeFilter 同時套用至頁面時,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")
在 [私人] 頁面上要求授權失敗。 當 AllowAnonymousFilter 和 AuthorizeFilter 同時套用至頁面時,AllowAnonymousFilter 會優先控制存取權。