脚手架标识后禁用预构建的 Razor UI 页面
Disable prebuilt Razor UI pages after scaffolding identity
在 VS2022 中,我启动了一个新的 Razor 页面项目,并选择了“个人帐户”作为身份验证类型。我发现没有可用于自定义的身份相关代码,因为它们是使用 Razor UI 预构建的。我想自定义页面,所以我按照下面建议的方法生成了页面。
之后,我想在创建管理员帐户后禁用注册页面。我选择了“从项目中排除”到 Register.chtml,如下所示。
令人惊讶的是,我发现当生成的页面被排除时,预建的 Razor UI 页面被自动使用(我仍然可以访问和使用 url /Identity/Account/Register)。如何禁用预构建的 Razor UI 页面?
包含 UI 包时,您选择使用所有包。您可以通过脚手架有选择地禁用页面,然后从 OnGet
和 OnPost
方法返回 NotFoundResult
,但这可能很费力。您还可以使用 Authorization 来防止访问页面或文件夹,方法是指定一个永远不会应用于用户的授权策略,或者一个不存在的角色,例如:
[Authorize(Roles ="Does Not Exist")]
public class RegisterModel : PageModel
{
...
或者,如果您根本不再需要身份 UI,请从您的应用程序中卸载该包。
您可以添加 app.Map
中间件,如下所示:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.Map("/Identity/Account/Register", HandleRequest);
app.Map("/Identity/Account/Login", HandleRequest);
static void HandleRequest(IApplicationBuilder app)
{
app.Run(async context =>
{
context.Response.StatusCode = StatusCodes.Status404NotFound;
await context.Response.WriteAsync("404 Not Found");
});
}
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
在 VS2022 中,我启动了一个新的 Razor 页面项目,并选择了“个人帐户”作为身份验证类型。我发现没有可用于自定义的身份相关代码,因为它们是使用 Razor UI 预构建的。我想自定义页面,所以我按照下面建议的方法生成了页面。
之后,我想在创建管理员帐户后禁用注册页面。我选择了“从项目中排除”到 Register.chtml,如下所示。
令人惊讶的是,我发现当生成的页面被排除时,预建的 Razor UI 页面被自动使用(我仍然可以访问和使用 url /Identity/Account/Register)。如何禁用预构建的 Razor UI 页面?
包含 UI 包时,您选择使用所有包。您可以通过脚手架有选择地禁用页面,然后从 OnGet
和 OnPost
方法返回 NotFoundResult
,但这可能很费力。您还可以使用 Authorization 来防止访问页面或文件夹,方法是指定一个永远不会应用于用户的授权策略,或者一个不存在的角色,例如:
[Authorize(Roles ="Does Not Exist")]
public class RegisterModel : PageModel
{
...
或者,如果您根本不再需要身份 UI,请从您的应用程序中卸载该包。
您可以添加 app.Map
中间件,如下所示:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.Map("/Identity/Account/Register", HandleRequest);
app.Map("/Identity/Account/Login", HandleRequest);
static void HandleRequest(IApplicationBuilder app)
{
app.Run(async context =>
{
context.Response.StatusCode = StatusCodes.Status404NotFound;
await context.Response.WriteAsync("404 Not Found");
});
}
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}