我正在研究MVC-3应用程序。在我的应用程序中,如果用户将尝试访问任何装饰为[Authorize]
的视图,用户将重定向到登录视图,用户将在那里输入凭据并重定向到授权视图(用户想要去的地方)。
问题:现在,如果用户没有帐户,那么他将使用注册链接创建一个帐户。但在创建新帐户后,用户将重定向到主页。我希望他重定向到授权视图而不是主页。我怎么能这样做?
答案 0 :(得分:0)
您必须将URL从登录视图传递到注册控制器,然后将其传递给控制器,直到用户注册,然后重定向回来。非常麻烦。
答案 1 :(得分:0)
创建一个派生自AuthorizeAttribute
的类,并覆盖OnAuthorization
方法。在此方法中,进行适当的授权检查,如果用户未获得授权,请执行以下代码:
var route = new RouteValueDictionary(new { controller = "Account", action = "LogOn", returnUrl = filterContext.RequestContext.HttpContext.Request.RawUrl });
filterContext.Result = new RedirectToRouteResult(route);
然后,在授权控制器的“登录”操作中,添加名为returnUrl
的参数。验证用户是否提供了正确的凭据后,请执行以下操作:
if (Url.IsLocalUrl(returnUrl))
return Redirect(returnUrl);
确保注册要由MVC使用的类,方法是将其添加到Global.asax.cs中的Application_start:
GlobalFilters.Filters.Add(new AuthorizationAttribute());
其中AuthorizationAttribute
是派生类的名称。
答案 2 :(得分:0)
您可以在用户的会话中保存他想要在重定向之前看到的授权页面... Request.Url.AbsoluteUri。尝试使用过滤器。
答案 3 :(得分:0)
您问题的一个简单解决方案是将当前网址从登录页面(在注册链接中)传递给查询字符串,如下所示;
@Html.ActionLink("Register", "Index", "Account", new { returnUrl Request.Url.PathAndQuery }, null)
所以,现在您可以像控制器方法参数中的其他人一样捕获此returnUrl,然后您可以将用户重定向回此returnUrl