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

ここで url は次のようなものです。

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

これは正しく生成されます。実装は、から継承する NewResult を使用し、次のRedirectResultようなコンストラクターを持ちます。

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

ベースコンストラクターが期待どおりに機能しない理由はありますか?

4

1 に答える 1

4

プロジェクトの1つで使用したものは次のとおりです。

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 に答える