2013-03-04 26 views
2

我必須處理一個遺留應用程序,其中重定向到需要驗證的資源不起作用。意思是通常:在asp.net中的AuthorizeAttribute屬性中使用的RedirectResult的問題mvc 3

Login?returnUrl=targetThatNeedsAuthentication 

甚至沒有生成。

情況如下。還有的實現:

AuthorizeAttribute 

其中,像往常一樣包含:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
{ 
    ... 
    var url = // get url of resource that requires authentication 
    filterContext.Result = new NewResult(url, false); 
} 

下面的網址是一樣的東西:

/membersonly/Login?redirectUrl=http://localhos:1234/targetThatNeedsAuthentication/ 

這是正確生成。實現使用NewResult,從RedirectResult繼承,有這樣一個構造函數:

public NewResult(string url, bool preserveForm) : base(url) 

任何想法,爲什麼預期基本構造可能不工作?

+0

什麼不工作?重定向? – ssilas777 2013-03-06 18:55:51

+0

是的,RedirectResult的基礎控制器,它接收url,不重定向或正確設置它... – cs0815 2013-03-06 19:18:08

+0

你可以發佈你的NewResult的代碼。我很好奇你是如何改變RedirectResult的。 – 2013-03-07 18:11:49

回答

4

這是我的項目之一使用:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
{ 
    filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary 
    { 
     { "action", "LogIn" }, 
     { "controller", "Account" }, 
     { "returnUrl", filterContext.HttpContext.Request.RawUrl} 
    }); 
} 
中的AccountController

然後,我有這樣的事情:

public ActionResult LogIn(LogInModel modelData, string returnUrl = "") 
{ 
    // check authorization 
    ... 

    if (user != null) // user is authorized 
    { 
    if (Url.IsLocalUrl(returnUrl)) 
     return Redirect(returnUrl); 
    else 
     // return to default authorized page 
    } 
} 

很顯然,你需要去適應它爲你案件。

相關問題