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?
Essayer:
var url = filterContext.HttpContext.Request.Url;
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
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.
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}";
}