即使在获取登录页面时,returnUrl 始终为 null

returnUrl always null even when getting the login page

我看到很多人都问过这个问题,但解决方案总是发布表格。重定向到我的自定义登录页面时,我什至没有得到任何值。 这是我的登录控制器

// GET: /Login
    [AllowAnonymous]
    public ActionResult Index(string returnUrl)
    {
        ViewBag.ReturnUrl = returnUrl;
        return View();
    }

Web.config

<authentication mode="Forms">
  <forms loginUrl="~/Login" timeout="2880" cookieless="UseCookies"/>
</authentication>

和自定义 UserAuthorize 过滤器

public override void OnAuthorization(AuthorizationContext filterContext)
    {
        // If they are authorized, handle accordingly
        if (this.AuthorizeCore(filterContext.HttpContext))
        {
            base.OnAuthorization(filterContext);
        }
        else
        {
            // Otherwise redirect to your specific authorized area
            filterContext.Result = new RedirectResult("~/Login");
        }
    }

谢谢

如果您使用自定义授权方式,则必须手动添加returnUrl参数。通常,FormsAuthentication class 处理将此参数添加到 QueryString。

var request = filterContext.HttpContext.Request;

// Get return url if it exist
if (request.HttpMethod.Equals("GET", System.StringComparison.CurrentCultureIgnoreCase))
    returnUrl = request.RawUrl;

filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(
         new
         {
               controller = "Login",
               action = "Index",
               ReturnUrl = returnUrl,
         }));