Asp.net

FormsAuthentication.GetRedirectUrl 始終返回預設值

  • August 3, 2016

我有一個 ASP.NET MVC 應用程序,並且正在使用 Forms auth。當轉到需要身份驗證的頁面時,這意味著有

$$ Authorize $$控制器操作上的屬性,它將使用者重定向到登錄頁面,返回 url 像http://localhost/Login?ReturnUrl=/MyAuthorizedUrl. 這就是我的配置的設置方式:

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

這就是我獲取重定向網址的方式:

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

這總是返回預設的 url。

這是什麼原因造成的?

我假設您希望獲得“MyAuthorizedUrl”作為FormsAuthentication.GetRedirectUrl

您需要插入一個隱藏的輸入欄位來鏡像ReturnUrl=/MyAuthorizedUrl,例如name="ReturnUrl" value="/MyAuthorizedUrl".

原因是登錄頁面是通過帶有 GET 的 GET 請求的ReturnUrl,但 POST 轉到/Login(沒有任何參數)。

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

如果您的登錄表單:

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

將“登錄”替換為您的操作名稱,將“帳戶”替換為您的控制器名稱。

引用自:https://stackoverflow.com/questions/4246606