消除RETURNURL現在對未經授權試圖訪問一個動作我的ASP.NET MVC應用程序用戶重定向到登錄頁面,並生成URL如下所示:如何從瀏覽器的地址
http://www.mysite.com/Account/Log?ReturnUrl=%2Ftest%2Fsampleaction
那麼,有沒有一種從URL中消除該字符串的方法,但將其保存在某處以便能夠在登錄後將用戶重定向回來?
消除RETURNURL現在對未經授權試圖訪問一個動作我的ASP.NET MVC應用程序用戶重定向到登錄頁面,並生成URL如下所示:如何從瀏覽器的地址
http://www.mysite.com/Account/Log?ReturnUrl=%2Ftest%2Fsampleaction
那麼,有沒有一種從URL中消除該字符串的方法,但將其保存在某處以便能夠在登錄後將用戶重定向回來?
我會考慮實現我自己的AuthorizationFilter並進行重定向。
public class AuthorizationFilter : IFilter
{
public bool Perform(ExecuteWhen exec, IEngineContext context,
IController controller, IControllerContext controllerContext)
{
if (context.CurrentUser.IsInRole("Administrator"))
{
return true;
}
context.Response.Redirect("home", "index");
return false;
}
}
重定向到登錄行爲存儲網址
TempData["redirect-url"] = "/requested/page/url";
在登錄行動前閱讀價值,並通過它來登錄查看並付諸隱藏字段。
我會實現一個AuthorizationAttribute
public class MyAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result is HttpUnauthorizedResult)
{
filterContext.HttpContext.Session["ReturnUrl"] = filterContext.HttpContext.Request.UrlReferrer.AbsoluteUri
filterContext.Result = // Your login page controller;
}
}
}
這不是測試,但可能會幫助你找到答案
祝你好運,請找到時提供解決方案。
我想知道爲什麼你想這樣做。也許你厭倦了濫用,過多的URL參數方法,並且你喜歡乾淨的REST風格的URL風格以及可以使用新的ASP.NET路由功能實現的優雅方式。
但是,在這種情況下,這正是URL參數的目的。這不是壞習慣或者糟糕的風格。並且絕對沒有理由將SEO witchery應用到您的登錄頁面。那麼,爲什麼要通過直接要求會話狀態(或間接通過TempData
)或任何其他解決方法來讓此過程對用戶而言不那麼可靠呢?
但重定向是由MVC基礎結構自動完成的。我所做的就是在我的動作上設置[授權]屬性 – 2010-03-30 08:44:46