2010-03-30 42 views

回答

0

我會考慮實現我自己的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; 
} 
} 
0

重定向到登錄行爲存儲網址

TempData["redirect-url"] = "/requested/page/url"; 

在登錄行動前閱讀價值,並通過它來登錄查看並付諸隱藏字段。

+0

但重定向是由MVC基礎結構自動完成的。我所做的就是在我的動作上設置[授權]屬性 – 2010-03-30 08:44:46

0

我會實現一個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; 
     } 

    } 
} 

這不是測試,但可能會幫助你找到答案

祝你好運,請找到時提供解決方案。

4

我想知道爲什麼你想這樣做。也許你厭倦了濫用,過多的URL參數方法,並且你喜歡乾淨的REST風格的URL風格以及可以使用新的ASP.NET路由功能實現的優雅方式。

但是,在這種情況下,這正是URL參數的目的。這不是壞習慣或者糟糕的風格。並且絕對沒有理由將SEO witchery應用到您的登錄頁面。那麼,爲什麼要通過直接要求會話狀態(或間接通過TempData)或任何其他解決方法來讓此過程對用戶而言不那麼可靠呢?