Razor Convenzioni di autorizzazione pagine in ASP.NET Core
Un modo per controllare l'accesso nell'app Pages consiste nell'usare Razor le convenzioni di autorizzazione all'avvio. Queste convenzioni consentono di autorizzare gli utenti e consentire agli utenti anonimi di accedere a singole pagine o cartelle di pagine. Le convenzioni descritte in questo argomento applicano automaticamente i filtri di autorizzazione per controllare l'accesso.
Visualizzare o scaricare il codice di esempio (procedura per il download)
L'app di esempio usa cookie l'autenticazione senza ASP.NET Core Identity. I concetti e gli esempi illustrati in questo argomento si applicano allo stesso modo alle app che usano ASP.NET Core Identity. Per usare ASP.NET Core Identity, seguire le indicazioni riportate in Introduzione a Identity in ASP.NET Core.
Richiedere l'autorizzazione per accedere a una pagina
Usare la AuthorizePage convenzione per aggiungere un oggetto AuthorizeFilter alla pagina nel percorso specificato:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine senza un'estensione e contenente solo barre.
Per specificare un criterio di autorizzazione, usare un overload AuthorizePage:
options.Conventions.AuthorizePage("/Contact", "AtLeast21");
Nota
Un AuthorizeFilter oggetto può essere applicato a una classe modello di pagina con l'attributo [Authorize]
filter. Per altre informazioni, vedere Autorizzare l'attributo di filtro.
Richiedere l'autorizzazione per accedere a una cartella di pagine
Usare la AuthorizeFolder convenzione per aggiungere un oggetto AuthorizeFilter a tutte le pagine di una cartella nel percorso specificato:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine.
Per specificare un criterio di autorizzazione, usare un overload AuthorizeFolder:
options.Conventions.AuthorizeFolder("/Private", "AtLeast21");
Richiedere l'autorizzazione per accedere a una pagina di area
Usare la AuthorizeAreaPage convenzione per aggiungere un oggetto AuthorizeFilter alla pagina dell'area nel percorso specificato:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");
Il nome della pagina è il percorso del file senza estensione relativa alla directory radice delle pagine per l'area specificata. Ad esempio, il nome della pagina per il file Areas/Identity/Pages/Manage/Accounts.cshtml
è /Manage/Accounts.
Per specificare un criterio di autorizzazione, usare un overload AuthorizeAreaPage:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");
Richiedere l'autorizzazione per accedere a una cartella di aree
Usare la AuthorizeAreaFolder convenzione per aggiungere un oggetto AuthorizeFilter a tutte le aree di una cartella nel percorso specificato:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");
Il percorso della cartella è il percorso della cartella relativa alla directory radice delle pagine per l'area specificata. Ad esempio, il percorso della cartella per i file in Aree//IdentityPagine/Gestisci/ è /Manage.
Per specificare un criterio di autorizzazione, usare un overload AuthorizeAreaFolder:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");
Consentire l'accesso anonimo a una pagina
Usare la AllowAnonymousToPage convenzione per aggiungere un oggetto AllowAnonymousFilter a una pagina nel percorso specificato:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine senza un'estensione e contenente solo barre.
Consentire l'accesso anonimo a una cartella di pagine
Usare la AllowAnonymousToFolder convenzione per aggiungere un oggetto AllowAnonymousFilter a tutte le pagine di una cartella nel percorso specificato:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine.
Nota sulla combinazione di accesso autorizzato e anonimo
È valido specificare che una cartella di pagine richiede l'autorizzazione e quindi specificare che una pagina all'interno di tale cartella consente l'accesso anonimo:
// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")
Il contrario, tuttavia, non è valido. Non è possibile dichiarare una cartella di pagine per l'accesso anonimo e quindi specificare una pagina all'interno di tale cartella che richiede l'autorizzazione:
// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")
La richiesta di autorizzazione nella pagina Privata ha esito negativo. Quando entrambi gli AllowAnonymousFilter oggetti e AuthorizeFilter vengono applicati alla pagina, ha la precedenza e controlla l'accesso AllowAnonymousFilter .
Risorse aggiuntive
Un modo per controllare l'accesso nell'app Pages consiste nell'usare Razor le convenzioni di autorizzazione all'avvio. Queste convenzioni consentono di autorizzare gli utenti e consentire agli utenti anonimi di accedere a singole pagine o cartelle di pagine. Le convenzioni descritte in questo argomento applicano automaticamente i filtri di autorizzazione per controllare l'accesso.
Visualizzare o scaricare il codice di esempio (procedura per il download)
L'app di esempio usa cookie l'autenticazione senza ASP.NET Core Identity. I concetti e gli esempi illustrati in questo argomento si applicano allo stesso modo alle app che usano ASP.NET Core Identity. Per usare ASP.NET Core Identity, seguire le indicazioni riportate in Introduzione a Identity in ASP.NET Core.
Richiedere l'autorizzazione per accedere a una pagina
Usare la AuthorizePage convenzione tramite AddRazorPagesOptions per aggiungere un oggetto AuthorizeFilter alla pagina nel percorso specificato:
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);
Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine senza un'estensione e contenente solo barre.
Per specificare un criterio di autorizzazione, usare un overload AuthorizePage:
options.Conventions.AuthorizePage("/Contact", "AtLeast21");
Nota
Un AuthorizeFilter oggetto può essere applicato a una classe modello di pagina con l'attributo [Authorize]
filter. Per altre informazioni, vedere Autorizzare l'attributo di filtro.
Richiedere l'autorizzazione per accedere a una cartella di pagine
Usare la AuthorizeFolder convenzione tramite AddRazorPagesOptions per aggiungere un AuthorizeFilter oggetto a tutte le pagine di una cartella nel percorso specificato:
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);
Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine.
Per specificare un criterio di autorizzazione, usare un overload AuthorizeFolder:
options.Conventions.AuthorizeFolder("/Private", "AtLeast21");
Richiedere l'autorizzazione per accedere a una pagina di area
Usare la AuthorizeAreaPage convenzione tramite AddRazorPagesOptions per aggiungere un oggetto AuthorizeFilter alla pagina dell'area nel percorso specificato:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");
Il nome della pagina è il percorso del file senza estensione relativa alla directory radice delle pagine per l'area specificata. Ad esempio, il nome della pagina per il file Areas/Identity/Pages/Manage/Accounts.cshtml
è /Manage/Accounts.
Per specificare un criterio di autorizzazione, usare un overload AuthorizeAreaPage:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");
Richiedere l'autorizzazione per accedere a una cartella di aree
Usare la AuthorizeAreaFolder convenzione tramite AddRazorPagesOptions per aggiungere un oggetto AuthorizeFilter a tutte le aree di una cartella nel percorso specificato:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");
Il percorso della cartella è il percorso della cartella relativa alla directory radice delle pagine per l'area specificata. Ad esempio, il percorso della cartella per i file in Aree//IdentityPagine/Gestisci/ è /Manage.
Per specificare un criterio di autorizzazione, usare un overload AuthorizeAreaFolder:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");
Consentire l'accesso anonimo a una pagina
Usare la AllowAnonymousToPage convenzione tramite AddRazorPagesOptions per aggiungere un oggetto AllowAnonymousFilter a una pagina nel percorso specificato:
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);
Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine senza un'estensione e contenente solo barre.
Consentire l'accesso anonimo a una cartella di pagine
Usare la AllowAnonymousToFolder convenzione tramite AddRazorPagesOptions per aggiungere un AllowAnonymousFilter oggetto a tutte le pagine di una cartella nel percorso specificato:
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);
Il percorso specificato è il percorso del motore di visualizzazione, ovvero il Razor percorso relativo radice pagine.
Nota sulla combinazione di accesso autorizzato e anonimo
È possibile specificare che una cartella di pagine che richiedono l'autorizzazione e che non specifichi che una pagina all'interno di tale cartella consenta l'accesso anonimo:
// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")
Il contrario, tuttavia, non è valido. Non è possibile dichiarare una cartella di pagine per l'accesso anonimo e quindi specificare una pagina all'interno di tale cartella che richiede l'autorizzazione:
// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")
La richiesta di autorizzazione nella pagina Privata ha esito negativo. Quando entrambi gli AllowAnonymousFilter oggetti e AuthorizeFilter vengono applicati alla pagina, ha la precedenza e controlla l'accesso AllowAnonymousFilter .
Risorse aggiuntive
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per