2013-03-04 59 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 
    } 
} 

很显然,你需要去适应它为你案件。

相关问题