net mvc filters data attribute asp asp.net-mvc url authorization action-filter actionfilterattribute

asp.net mvc - mvc - ¿Cómo obtengo la Url actual desde un FilterAttribute?



filters asp net mvc 5 (4)

En mi caso específico, UrlReferrer URL de UrlReferrer .

filterContext.HttpContext.Request.UrlReferrer

Este me permitió redirigir al usuario de vuelta a la página que era antes de intentar acceder a una acción para la que no tiene permiso de acceso.

Estoy escribiendo un atributo de filtro Autorizar y estoy teniendo problemas para averiguar cómo obtener la URL actual como una cadena, así que puedo pasarla como un parámetro para la acción Iniciar sesión. El objetivo es que si un usuario inicia sesión con éxito, se lo redireccionará a la página a la que originalmente intentaba acceder.

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

¿Cómo obtengo la URL completa de la cadena de la solicitud actual?


Este es el resultado más alto en Google, así que en Asp.net Core 2.0 así es como lo estoy haciendo:

context.HttpContext.Request.Url();

usando este método de extensión:

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


Para obtener la URL completa puede intentar como lo sugiere @rboarman pero normalmente RedirectUrl será la url relativa y para eso debe probar la propiedad RawUrl del objeto Request .

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

EDITADO: solucionado el segundo ejemplo


Tratar:

var url = filterContext.HttpContext.Request.Url;