You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:30:00