2010-11-22 127 views
6

我有一個ASP.NET MVC應用程序,並使用窗體身份驗證。當轉到需要認證的頁面時,意味着控制器操作上有一個[Authorize]屬性,它會將用戶重定向到登錄頁面,並返回url,如http://localhost/Login?ReturnUrl=/MyAuthorizedUrlFormsAuthentication.GetRedirectUrl總是返回默認

這是我的配置是如何設置:

<authentication mode="Forms"> 
    <forms loginUrl="~/Login" timeout="2880" defaultUrl="~/" /> 
</authentication> 

這是我應得的重定向URL:

var url = FormsAuthentication.GetRedirectUrl(model.Email, model.RememberMe); 

這總是返回默認網址。

這是什麼造成的?

回答

7

我假設您想通過FormsAuthentication.GetRedirectUrl得到「MyAuthorizedUrl」?

您需要插入一個隱藏的輸入字段,該字段鏡像爲ReturnUrl=/MyAuthorizedUrl,例如, name="ReturnUrl" value="/MyAuthorizedUrl"

原因是登錄頁面是通過GET請求ReturnUrl,但郵政去/Login(沒有任何參數)。

或者更改表單動作屬性以包含ReturnUrl參數。

5

如果你的登錄表單:

@using (Html.BeginForm 
(
    "Login", 
    "Account", 
    new { ReturnUrl = Request.QueryString["ReturnUrl"] }, 
    FormMethod.Post 
)) 

替換「登錄」與您的操作名稱和「帳戶」與您的控制器名稱。