【发布时间】:2019-10-01 22:13:09
【问题描述】:
我已经创建了一个授权策略并在 startup.cs 文件中注册了处理程序。当策略失败时,我想将用户重定向到自定义错误页面,但总是被重定向到 /Account/AccessDenied?ReturnUrl=MyPage。我似乎无法弄清楚如何注册自定义错误页面。我尝试了一些选项,例如拥有 app.UseStatusCodePages。任何帮助是极大的赞赏 启动。铯
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("HomePolicyTestPolicy", policy => policy.Requirements.Add(new AuthorizedPermissionsRequirement(new List<UserPermissionsEnum>() { UserPermissionsEnum.ADEAdmin })));
});
services.AddSingleton<IAuthorizationHandler, AuthorizedPermissionsHandler>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IHttpContextAccessor accessor)
{
if (env.IsLocalOrDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseSession();
app.UseStatusCodePages(async context =>
{
if (context.HttpContext.Response.StatusCode == 403)
{
context.HttpContext.Response.Redirect("/Error/Index");
}
});
}
Handler:
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, AuthorizedPermissionsRequirement requirement)
{
context.Fail();
return Task.CompletedTask;
}
Controller:
[Authorize(Policy = "HomePolicyTestPolicy")]
public IActionResult PolicyTest()
{
return View();
}
结果:它总是将我重定向到 /Account/AccessDenied?ReturnUrl=PolicyTest。我不知道让它重定向到 Home/Error。
【问题讨论】:
-
把Startup.cs的相关内容贴出来会很有帮助
-
@ShahzadHassan 请看上面的代码。谢谢
-
您需要将呼叫移至
UseStatusCodePages,然后移至UseStaticFiles。顺序很重要,否则你的中间件在生成 403 后将得不到响应。 -
我也试过了,当它到达 usestatuscode 中间件时,它已经在 /Account/AccessDenied 上找不到 404。
-
能否将示例代码上传到GitHub?我认为您的端出了点问题。
标签: asp.net-core