2

我必须处理一个遗留应用程序,其中重定向到需要身份验证的资源不起作用。意思是通常:

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)

任何想法为什么基本构造函数可能无法按预期工作?

4

1 回答 1

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
  }
}

显然,您需要根据您的情况对其进行调整。

于 2013-03-12T17:14:48.303 回答