我正在开发 MVC-3 应用程序。在我的应用程序中,如果用户尝试访问任何装饰为[Authorize]
的视图,则用户重定向到登录视图,用户将在那里输入凭据并重定向到授权视图(用户想去的地方)。
问题:现在如果用户没有帐户,那么他将使用注册链接创建一个。但是在创建新帐户后,用户将重定向到主页。我希望他重定向到授权视图而不是主页。我怎样才能做到这一点?
我正在开发 MVC-3 应用程序。在我的应用程序中,如果用户尝试访问任何装饰为[Authorize]
的视图,则用户重定向到登录视图,用户将在那里输入凭据并重定向到授权视图(用户想去的地方)。
问题:现在如果用户没有帐户,那么他将使用注册链接创建一个。但是在创建新帐户后,用户将重定向到主页。我希望他重定向到授权视图而不是主页。我怎样才能做到这一点?
您必须将 url 从登录视图传递给注册控制器,然后在控制器周围传递它,直到用户注册,然后重定向回来。相当麻烦。
创建一个派生自 的类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
您的派生类的名称在哪里。
You can save in the user's session the authorization page he wanted to see before redirection ... Request.Url.AbsoluteUri. Try using a Filter.
One simple solution to your problem is to pass the current url to query string from login page (in register link) like this;
@Html.ActionLink("Register", "Index", "Account", new { returnUrl Request.Url.PathAndQuery }, null)
so, now you can catch this returnUrl like others in controller method parameter and you can then redirect user back to this returnUrl