.NET Core 5 MVC 身份认证跳转登录页时如何携带原请求的自定义参数
实现方案
该需求完全可以实现,通过自定义Cookie认证的重定向事件即可完成参数传递。
步骤1:修改Startup.cs的Cookie认证配置
在原有AddCookie配置块中新增Events配置,重写OnRedirectToLogin事件,在跳转登录页前将原请求的parameterA参数追加到跳转地址中:
services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; }) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options => { options.LoginPath = "/login"; // 新增重定向事件配置 options.Events = new CookieAuthenticationEvents { OnRedirectToLogin = context => { // 从原请求的Query参数中读取parameterA if (context.Request.Query.TryGetValue("parameterA", out var parameterAValue)) { var redirectUriBuilder = new UriBuilder(context.RedirectUri); // 拼接参数到登录页跳转地址 if (!string.IsNullOrEmpty(redirectUriBuilder.Query)) { redirectUriBuilder.Query += "&"; } redirectUriBuilder.Query += $"parameterA={Uri.EscapeDataString(parameterAValue)}"; context.RedirectUri = redirectUriBuilder.ToString(); } return Task.CompletedTask; } }; });
步骤2:登录接口接收传递的参数
在登录对应的Action方法中直接声明parameterA参数即可拿到传递的值,用于后续业务逻辑:
public IActionResult Login(string parameterA) { // 此处即可使用传入的parameterA做业务决策 // 可将参数存入ViewData/TempData传递到登录页,或者直接做逻辑判断 return View(); }
扩展说明
- 如果需要传递原请求的所有Query参数,可以遍历
context.Request.Query的所有键值对统一追加,无需单独判断 - 如果是POST请求的Form参数需要传递,可从
context.Request.Form中读取对应值,不过POST类型的接口请求未登录时通常建议返回401状态码而非页面跳转,该方案更适配GET类型的页面访问场景
内容的提问来源于stack exchange,提问作者Wesley
相关产品推荐
相关产品推荐

