2

Я использую последнюю версию ASP.NET MVC 6.Как попасть в ReturnUrl AccessDeniedPath в ASP.NET MVC 6 (ASP.NET ядра)

Следующие настройки устанавливаются Startup.cs файл:

public void ConfigureServices(IServiceCollection services) 
{ 
      services.AddIdentity<ApplicationUser, ApplicationRole>(options => 
      { 
       options.Cookies.ApplicationCookie.LoginPath = new PathString("/account/login"); 
       options.Cookies.ApplicationCookie.AccessDeniedPath = new PathString("/error/accessdenied"); 
       options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromDays(1); 
       options.Cookies.ApplicationCookie.SlidingExpiration = false; 
       options.Cookies.ApplicationCookie.AutomaticAuthenticate = true; 
       options.Cookies.ApplicationCookie.AutomaticChallenge = true; 
      }) 
       .AddEntityFrameworkStores<ApplicationDbContext>() 
       .AddDefaultTokenProviders(); 
} 

В Account контроллер имеет действие Login

 [HttpGet] 
     [AllowAnonymous] 
     public IActionResult Login(string returnUrl = null) 
     { 
      ViewData["ReturnUrl"] = returnUrl; 
      return View(); 
     } 

В методе выше у меня нет проблем с получением returnUrl.

Кроме того, в контроллер Error имеющий действие AccessDenied

 [AllowAnonymous] 
     [HttpGet] 
     public IActionResult AccessDenied(string returnUrl = null) 
     { 
      ViewData["ReturnUrl"] = returnUrl; 
      return View(); 
     } 

Но когда пользователь не имеет права доступа к страницам сайта, система перенаправляет пользователя на страницу ../error/accessdenied.

На данный момент, после того как я перенаправлен returnUrl значение null.

Могу ли я получить адрес страницы, с которой был перенаправлен пользователь (а также работает для LoginPath)?

ответ

2

Кажется, он будет отправлен в RC2, посмотрите на исходный код метода CookieAuthorizationHandler.HandleForbiddenAsync на GitHub,

protected override async Task<bool> HandleForbiddenAsync(ChallengeContext context) 
{ 
    var properties = new AuthenticationProperties(context.Properties); 
    var returnUrl = properties.RedirectUri; 
    if (string.IsNullOrEmpty(returnUrl)) 
    { 
     returnUrl = OriginalPathBase + Request.Path + Request.QueryString; 
    } 
    var accessDeniedUri = Options.AccessDeniedPath + QueryString.Create(Options.ReturnUrlParameter, returnUrl); 
    var redirectContext = new CookieRedirectContext(Context, Options, BuildRedirectUri(accessDeniedUri), properties); 
    await Options.Events.RedirectToAccessDenied(redirectContext); 
    return true; 
} 

Вы можете иметь обратную связь о том, как перейти от RC1 до RC2 на Home repository.

 Смежные вопросы

  • Нет связанных вопросов^_^