[英]Can't read ReturnUrl after redirecting to login page in Razor Pages
我试图在重定向到登录页面后读取 ReturnUrl 查询字符串值(由于[Authorize]
属性)。 这是重定向后显示的 url: https://localhost:5001/Identity/Login?ReturnUrl=%2FTeam%2FRead%2FOnGet (对我来说似乎是正确的)。
我以这种方式设置了一个属性:
[BindProperty]
public string ReturnUrl { get; set; }
发布登录表单后,据我了解 Model 绑定如何工作,我希望该属性设置为"/Team/Read/OnGet"
。 不幸的是,它始终是 null。
在调试模式下深入查看问题,似乎请求中的查询字符串属性与 url 中的不一样。
实际上,Request.Querystring 属性中的唯一值是?handler=login
,而 Request.RouteValues 字典只有一个键: "/Identity/Login"
。
如果有任何帮助,这是我的 Startup.cs 配置:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("FootballDb")));
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddLogging();
services.AddTransient<IDataProvider, SqlDataProvider>();
services.AddRazorPages().AddRazorRuntimeCompilation();
//services.AddRazorPages().AddRazorRuntimeCompilation().AddRazorPagesOptions(options => options.Conventions.AddPageRoute("/Index/OnGet", ""));
services.AddAuthentication()
.AddGoogle(options =>
{
IConfigurationSection googleAuthNSection =
Configuration.GetSection("Authentication:Google");
options.ClientId = "172755709400-lhipoag0fkvlk56jsuv9rh00bfs5s7aa.apps.googleusercontent.com";
options.ClientSecret = "HD_1jnsoycIFV2-Xf-iqYyDu";
})
.AddFacebook(options =>
{
IConfigurationSection googleAuthNSection =
Configuration.GetSection("Authentication:Facebook");
options.AppId = "blabla";
options.AppSecret = "blabla";
});
services.Configure<IdentityOptions>(options =>
{
// Password settings.
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Password.RequireNonAlphanumeric = true;
options.Password.RequireUppercase = true;
options.Password.RequiredLength = 6;
options.Password.RequiredUniqueChars = 1;
// Lockout settings.
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
options.Lockout.MaxFailedAccessAttempts = 5;
options.Lockout.AllowedForNewUsers = true;
// User settings.
options.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
options.User.RequireUniqueEmail = false;
options.SignIn.RequireConfirmedEmail = false;
});
services.ConfigureApplicationCookie(options =>
{
// Cookie settings
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(5);
options.LoginPath = "/Identity/Login";
//options.AccessDeniedPath = "/Identity/Login";
options.SlidingExpiration = true;
});
}
我也尝试评论这两行
options.LoginPath = "/Identity/Login";
options.AccessDeniedPath = "/Identity/Login";
没有运气。
您几乎已经有了答案,唯一忘记的是BindProperty需要处理请求的Get方面。 将您的ReturnUrl更改为以下内容以使其正常工作:
[BindProperty(Name = "ReturnUrl", SupportsGet = true)]
public string ReturnUrl { get; set; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.