31

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.¿Cómo obtengo la Url actual desde dentro de un FilterAttribute?

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 cadena completa Url de la solicitud actual?

Respuesta

59

Probar:

var url = filterContext.HttpContext.Request.Url; 
+6

También podría usar RawUrl (filterContext.HttpContext.Request.RawUrl) para obtener la url sin dominio –

15

Para obtener la completa URL se puede tratar como lo sugiere el @rboarman pero por lo general el RedirectUrl será el URL relativa y para eso se tiene que probar la propiedad RawUrl de la Request objeto.

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

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

EDITADO: Se ha corregido el segundo ejemplo

+0

¿Quiso decir "RawUrl" para su segundo ejemplo? –

+0

-1 Observar el valor de 'Url' no lo hace mágicamente absoluto sino relativo. –

+0

@JoshNoe Sí, quise decir RawUrl en el segundo ejemplo. Estoy un poco alejado de SO hoy en día y echo de menos ver tu comentario. – VJAI

4

En mi caso particular yo estaba después de la URL UrlReferrer.

filterContext.HttpContext.Request.UrlReferrer 

Ésta me dejó redirigir al usuario a la página que estaba antes de intentar acceder a una acción que no tiene permiso de acceso.

Cuestiones relacionadas