31

Sto scrivendo un attributo di filtro Autorizza e non riesco a capire come ottenere l'url corrente come stringa, così posso passarlo come parametro all'azione LogOn. L'obiettivo è che se un utente accede con successo, verrà reindirizzato alla pagina in cui cercava originariamente di accedere.Come ottengo l'Url corrente da 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? 
      } 
     ); 
    } 
} 

Come ottengo l'intero URL stringa dalla richiesta corrente?

risposta

59

Prova:

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

È anche possibile utilizzare RawUrl (filterContext.HttpContext.Request.Rawest) per ottenere l'URL senza dominio –

15

Per ottenere il completo URL si può provare come suggerito dal @rboarman ma di solito il RedirectUrl sarà il URL relativo e per questo si deve provare la proprietà RawUrl del Request oggetto.

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

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

CURA: Corretto il secondo esempio

+0

Intendevi per "RawUrl" da utilizzare nel 2o esempio? –

+0

-1 L'osservazione del valore di 'Url' non la rende magicamente assoluta quindi relativa. –

+0

@JoshNoe Sì, intendevo RawUrl nel secondo esempio. Al giorno d'oggi sono poco lontano da SO e ho perso il tuo commento. – VJAI

4

Nel mio caso specifico mi è stato dopo l'URL UrlReferrer.

filterContext.HttpContext.Request.UrlReferrer 

Questo mi permetta di reindirizzare l'utente torna alla pagina che era prima di tentare di accedere ad un'azione che non ha il permesso di accesso.

Problemi correlati