要解决ASP.NET Core 3.1中未授权返回401状态码时未重定向到未授权的Razor页面的问题,可以按照以下步骤进行操作:
Startup.cs
文件的ConfigureServices
方法中,确保已经配置了身份验证服务和授权策略:public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddAuthentication()
.AddCookie(options =>
{
options.LoginPath = "/Account/Login";
options.AccessDeniedPath = "/Account/AccessDenied";
});
services.AddAuthorization(options =>
{
options.AddPolicy("RequireAdminRole", policy => policy.RequireRole("Admin"));
});
// ...
}
上述代码中,AddCookie
方法用于配置Cookie身份验证,并指定了登录路径和访问被拒绝路径。AddAuthorization
方法用于配置授权策略,并添加了一个名为"RequireAdminRole"的策略。
Startup.cs
文件的Configure
方法中,确保已经配置了身份验证和授权中间件,并在合适的位置添加UseAuthentication
和UseAuthorization
中间件:public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseAuthentication();
app.UseAuthorization();
// ...
}
Authorize
标记进行标记,并添加一个AllowAnonymous
标记的方法来处理未授权的情况,例如:@page
@model IndexModel
@attribute [Authorize(Policy = "RequireAdminRole")]
Welcome to the Admin Dashboard
上述代码中,@attribute [Authorize(Policy = "RequireAdminRole")]
用于指定需要进行授权,并使用名为"RequireAdminRole"的授权策略。如果用户未经授权访问该页面,将会被重定向到未授权的页面。
AccessDenied.cshtml
,并处理未授权的情况。在该页面中,可以自定义显示未授权的内容,例如:@page
@model AccessDeniedModel
You do not have access to this page.
上述代码中,AccessDenied.cshtml
页面将会显示一个简单的提示信息,告知用户他们无权访问该页面。
通过上述步骤,当未经授权的用户访问授权页面时,将会返回401状态码并重定向到未授权的Razor页面。如果仍然无法生效,请检查代码中是否存在其他中间件或配置可能会干扰到授权流程的问题。