Ситуация: я возвращаю Forbid()
из PageModel, и это инициирует ответ с перенаправлением (302) на /AccessDenied&returnUrl=...
Здесь я указываю путь:
// configuration was used
serviceCollection.ConfigureApplicationCookie(options =>
{
options.AccessDeniedPath = new PathString("/AccessDenied");
});
Но как я могу полностью переопределить создание «ответа на перенаправление» и указать свои собственные параметры GET (что-то вроде returnUrl
) или переопределить значение returnUrl
(я хочу передать свое собственное значение, сохраненное в пользовательском запросе особенность )
В качестве альтернативы вместо возврата Forbid()
я могу перенаправить в AccessDenied вручную. Но я хотел бы остаться с Forbid()
для наглядности и последовательности.
ОБНОВЛЕНИЕ: это тоже не работает
public void ConfigureServices(IServiceCollection serviceCollection)
{
serviceCollection.ConfigureApplicationCookie(options =>
{
//options.AccessDeniedPath = new PathString("/AccessDenied");
options.Events.OnRedirectToAccessDenied = context =>
{
context.Response.Redirect("/AccessDenied&t=100");
return Task.CompletedTask;
};
});
// need for password reset functionality
serviceCollection.AddDbContext<WebUserDbContext>(optionsBuilder =>
optionsBuilder.UseSqlServer(ApplicationSettings.WebUserStorageConfiguration.ConnectionString));
serviceCollection.AddIdentity<WebUser, IdentityRole<int>>( options =>
{
options.SignIn.RequireConfirmedEmail = true;
})
.AddEntityFrameworkStores<WebUserDbContext>()
.AddDefaultTokenProviders();
// generally it is a version of routin by
serviceCollection.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
P.S. Это сервисный сайт, который не требует идентификации для аутентификации, но управляет записями пользователей. Таким образом, аутентификация MS Identity Lib не включена для сайта. Типы удостоверений только что были добавлены в контейнер, потому что мне нужны специальные функции Identity API: «сброс пароля» Это идиотская ситуация: UserManager
так же классы Identity API настолько сложны, что их невозможно построить иначе, чем получить из DI / контейнера. Пожалуйста, не делитесь этим безумием MS DI в ваших API.
Интересно, что без serviceCollection.AddIdentity
браузер получит «Ошибка 500» на .Forbid()
, а точка останова все равно не остановится на context.Response.Redirect("/AccessDenied&t=100");