我使用ASP.NET MVC 6的最新版本。
设置以下设置为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的工作)?
发布于 2016-04-08 22:14:56
看起来它将在CookieAuthorizationHandler.HandleForbiddenAsync中发布,看看GitHub上的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的反馈。
https://stackoverflow.com/questions/36492624
复制相似问题