Перенаправление на пользовательскую страницу ошибки при сбое политики авторизации - PullRequest
0 голосов
/ 14 мая 2019

Я создал политику авторизации и зарегистрировал обработчик в файле startup.cs. Я хотел бы перенаправить пользователя на пользовательскую страницу с ошибкой при сбое политики, но всегда перенаправляется в / Account / AccessDenied? ReturnUrl = MyPage. Я не могу понять, как зарегистрировать пользовательскую страницу ошибки. Я пробовал несколько вариантов, таких как наличие app.UseStatusCodePages. Любая помощь с благодарностью Запускать. Cs

    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.

1 Ответ

0 голосов
/ 14 мая 2019

Вы можете использовать промежуточное ПО кодовой страницы состояния, проверить Обработка ошибок

app.UseStatusCodePages(async context => {
  if (context.HttpContext.Response.StatusCode == 403)
  {
     // redirect to page
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...