2016-05-24 1 views
0

J'ai un ActionFilter qui capture avec succès des pages vues avec des informations importantes de la requête. La clé primaire de cette entrée capturée est ensuite associée à une activité (c'est-à-dire Connexion réussie).Comment capturer des redirections dans ASP.NET MVC

J'essaye maintenant de capturer automatiquement des redirections (c'est-à-dire: RedirectToAction) et associez ceci à la vue de page aussi bien. Je crois que cela peut être fait dans mon ActionFilter qui capture des pages vues, mais je ne suis pas sûr qu'il y ait un moyen de dire à partir du contexte OnActionExecuting si la requête GET provient ou non d'une redirection.

Est-il possible de dire d'un HttpRequest/ActionExecutingContext (ou ActionExecutedContext) si oui ou non la page provient d'une redirection?

Merci!

+0

Regardez l'en-tête Référenceur? À part ça, la seule autre chose que je puisse penser serait d'écrire un cookie dans la réponse et j'espère que le client va renvoyer le cookie. –

Répondre

4

RedirectToAction retourne un RedirectToRouteResult

Dans la méthode OnActionExecuted de votre filtre -

if (filterContext.Result is RedirectResult) 
{ 
    // It was a RedirectResult 
    var result = filterContext.Result as RedirectResult; 
    var url = UrlHelper.GenerateContentUrl(result.Url, filterContext.HttpContext); 
} 
else if (filterContext.Result is RedirectToRouteResult) 
{ 
    // It was a RedirectToRouteResult 
    var result = filterContext.Result as RedirectToRouteResult; 
    var url = UrlHelper.GenerateUrl(result.RouteName, null, null, result.RouteValues, RouteTable.Routes, filterContext.RequestContext, false); 
}