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;