web-dev-qa-db-ja.com

FilterAttribute内から現在のUrlを取得するにはどうすればよいですか?

現在のURLを文字列として取得してパラメーターとしてLogOnアクションに渡す方法を見つけるのに問題があるため、Authorizeフィルター属性を作成しています。目標は、ユーザーが正常にログオンすると、最初にアクセスしようとしていたページにリダイレクトされることです。

public override void OnAuthorization(AuthorizeContext filterContext)
{
    base.OnAuthorization(filterContext);

    ... my auth code ...
    bool isAuth ;
    ... my auth code ...

    if(!isAuth)
    {
        filterContext.Result = new RedirectToRouteResult(
            new RouteValueDictionary { 
                { "Area", "" }, 
                { "Controller", "Account" }, 
                { "Action", "LogOn" },
                { "RedirectUrl", "/Url/String/For/Currnt/Request" } // how do I get this?
            }
        );
    }
}

現在のリクエストから完全な文字列Urlを取得するにはどうすればよいですか?

39
quakkels

試してください:

var url = filterContext.HttpContext.Request.Url;
69
rboarman

完全なURLを取得するには、@rboarmanですが、通常RedirectUrl相対URLになります。そのためには、RawUrlオブジェクトのRequestプロパティを試す必要があります。

filterContext.HttpContext.Request.Url  ===> http://somesite.com/admin/manage

filterContext.HttpContext.Request.RawUrl ====> /admin/manage

編集:2番目の例を修正

17
VJAI

私の特定のケースでは、UrlReferrer URLの後にいました。

filterContext.HttpContext.Request.UrlReferrer

これにより、ユーザーにアクセス許可のないアクションにアクセスしようとする前のページにユーザーをリダイレクトできました。

5

これはGoogleで最高ランクの結果であるため、Asp.net Core 2.0では次のようにしています。

context.HttpContext.Request.Url();

この拡張メソッドを使用して:

/// <summary>
/// Returns the absolute url.
/// </summary>
public static string Url(this HttpRequest request)
{
    return $"{request.Scheme}://{request.Host}{request.Path}{request.QueryString}";
}
1
jmdon