Asp.net-Mvc
身份驗證後重定向到請求的頁面
我正在開發一個 mvc .net 應用程序,並且正在使用表單身份驗證。我想在使用者通過身份驗證後將使用者重定向到他請求的頁面。任何幫助,將不勝感激。
如果您創建一個 ASP.NET MVC 3 或 4 Internet 應用程序項目,它將有一個完整的範例說明如何在身份驗證時使用返回 url。
當您將 AuthorizeAttribute 添加到控制器以強制身份驗證時,它會將使用者重定向到您的 Login 方法,並自動附加 returnUrl 參數。從那裡,您需要在顯示登錄表單時對其進行跟踪:
public ActionResult Login(string returnUrl) { ViewBag.ReturnUrl = returnUrl; return View(); }然後將其添加到您的登錄表單的路由集合中:
@*//ReSharper disable RedundantAnonymousTypePropertyName*@ @using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) { @*//ReSharper restore RedundantAnonymousTypePropertyName*@ }一旦使用者送出登錄,假設他們正確驗證,您只需重定向到 returnUrl:
[HttpPost] public ActionResult Login(LoginModel model, string returnUrl) { return RedirectToLocal(returnUrl); }最困難的部分是通過 GET/POST 序列跟踪 ReturnUrl。
如果您想了解 AuthorizeAttribute 是如何工作的,這篇 StackOverflow文章顯示了使用原始請求設置 returnUrl。
您還需要確保您驗證 returnUrl 確實是一個本地 url,否則您將容易受到開放重定向攻擊。RedirectToLocal() 是 MVC 4 Internet Application 模板中的一個輔助方法,它執行此驗證:
private ActionResult RedirectToLocal(string returnUrl) { if (Url.IsLocalUrl(returnUrl)) { return Redirect(returnUrl); } else { return RedirectToAction("Index", "Home"); } }