繁体   English   中英

重定向到 Razor 页面中的登录页面后无法读取 ReturnUrl

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM