即使在获取登录页面时,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,
}));
我看到很多人都问过这个问题,但解决方案总是发布表格。重定向到我的自定义登录页面时,我什至没有得到任何值。 这是我的登录控制器
// 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,
}));