web-dev-qa-db-fra.com

Comment puis-je obtenir l'URL actuelle dans un FilterAttribute?

J'écris un attribut de filtre Autoriser adn J'ai du mal à trouver comment obtenir l'url actuelle sous forme de chaîne afin de pouvoir la passer en paramètre à l'action LogOn. Le but est que si un utilisateur ouvre une session avec succès, il sera redirigé vers la page à laquelle il tentait initialement d'accéder.

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

Comment puis-je obtenir l'URL de la chaîne complète de la demande actuelle?

39
quakkels

Essayer:

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

Pour obtenir le URL complet, vous pouvez essayer comme suggéré par le @rboarman mais généralement le RedirectUrl sera le RL relative et pour cela vous devez essayer la propriété RawUrl de l'objet Request.

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

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

MODIFIÉ: Correction du deuxième exemple

17
VJAI

Dans mon cas spécifique, je recherchais l'URL UrlReferrer.

filterContext.HttpContext.Request.UrlReferrer

Celui-ci m'a permis de rediriger l'utilisateur vers la page qu'il était avant d'essayer d'accéder à une action à laquelle il n'est pas autorisé à accéder.

5

C'est le résultat le mieux classé sur Google, donc dans Asp.net Core 2.0, voici comment je le fais:

context.HttpContext.Request.Url();

en utilisant cette méthode d'extension:

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