如何捕获mvc-3中的url进行重定向?

时间:2012-07-29 16:31:54

标签: c# asp.net-mvc-3

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

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

4 个答案:

答案 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