2

我正在开发 MVC-3 应用程序。在我的应用程序中,如果用户尝试访问任何装饰为[Authorize]的视图,则用户重定向到登录视图,用户将在那里输入凭据并重定向到授权视图(用户想去的地方)。

问题:现在如果用户没有帐户,那么他将使用注册链接创建一个。但是在创建新帐户后,用户将重定向到主页。我希望他重定向到授权视图而不是主页。我怎样才能做到这一点?

4

4 回答 4

0

您必须将 url 从登录视图传递给注册控制器,然后在控制器周围传递它,直到用户注册,然后重定向回来。相当麻烦。

于 2012-07-29T16:40:30.083 回答
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您的派生类的名称在哪里。

于 2012-07-29T16:46:34.840 回答
0

You can save in the user's session the authorization page he wanted to see before redirection ... Request.Url.AbsoluteUri. Try using a Filter.

于 2012-07-29T16:53:35.753 回答
0

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

于 2012-07-29T16:54:06.247 回答