50

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

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を取得するにはどうすればよいですか?

4

4 に答える 4

82

試す:

var url = filterContext.HttpContext.Request.Url;
于 2012-05-25T21:30:40.930 に答える
19

完全なものを取得するにはURL、提案されているように試すことができますが@rboarman、通常はRedirectUrl相対URLRawUrlであり、そのためにはオブジェクトのプロパティを試す必要がありRequestます。

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

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

編集済み:2番目の例を修正

于 2012-05-26T13:00:36.610 に答える
7

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

filterContext.HttpContext.Request.UrlReferrer

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

于 2013-05-04T08:53:37.250 に答える
5

これはGoogleで最高ランクの結果であるため、Asp.netCore2.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}";
}
于 2018-05-04T14:38:48.693 に答える