2012-07-29 25 views
2

我正在開發MVC-3應用程序。在我的應用程序中,如果用戶嘗試訪問裝飾爲[Authorize]的任何視圖,用戶將重定向到登錄視圖,那麼用戶將輸入證書並重定向到授權視圖(用戶想要去的地方)。如何捕獲mvc-3中的url進行重定向?

問題:現在,如果用戶沒有帳戶,那麼他將使用註冊鏈接創建一個。但創建新帳戶後,用戶將重定向到家中。我希望他重定向到授權視圖而不是主頁。我怎樣才能做到這一點?

回答

0

您必須將登錄視圖中的url傳遞給註冊控制器,然後將其傳遞給控制器​​,直到用戶註冊,然後重定向回來。相當繁瑣。

+0

謝謝,但我想知道登錄查看如何獲取'url'。所以通過這個我可以在其他情況下使用它,也可以在我們沒有登錄視圖的地址 – 2012-07-29 16:44:58

+0

我想(如果你願意的話,我可以看看源代碼)它從'AuthorizationAttribute'獲得它(通過'QueryString'或通過'TempData') – 2012-07-29 16:51:00

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是您的派生類的名稱。

+0

這並不解決用戶註冊OP提到的情況。 (或者是否?) – 2012-07-29 16:47:58

+0

ssg,它的確如此。我在我的網站中使用相同的技術。請更具體地說明它究竟無法解決的問題。 – Jake 2012-07-29 16:52:39

+0

@Jake操作系統詢問註冊後重定向用戶的方式,而不是登錄後。 – rcdmk 2012-07-29 16:57:11

0

您可以在用戶的​​會話中保存他希望在重定向之前查看的授權頁面... Request.Url.AbsoluteUri。嘗試使用過濾器。

0

你的問題的一個簡單的解決方案是從登錄頁面(在寄存器鏈接)像這樣傳遞當前URL到查詢字符串;

@Html.ActionLink("Register", "Index", "Account", new { returnUrl Request.Url.PathAndQuery }, null) 

所以,現在你可以抓住這個RETURNURL其他人一樣在控制器的方法參數,然後您可以重定向用戶返回到這個RETURNURL