J'essaie d'écrire un texte personnalisé ActionFilter
qui ajoutera un identifiant de demande à l QueryString
s'il n'en a pas déjà un.
Quelque chose comme ça :
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
Controller controller = (Controller)filterContext.Controller;
HttpRequestBase request = filterContext.HttpContext.Request;
// New request
if (request.QueryString[REQUEST_ID_KEY] == null)
{
string requestId = Utility.GetNewUniqueId();
controller.Session[REQUEST_ID_KEY] = requestId;
////////////////////////////////////////
// Add request id to query string ...???
////////////////////////////////////////
return;
}
}
Une façon d'ajouter le paramètre à la chaîne de requête que j'ai trouvée est de rediriger l'action vers elle-même avec l'id de la requête ajouté aux valeurs de la route, comme ceci :
RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
redirectTargetDictionary.Add("action", actionName);
redirectTargetDictionary.Add("controller", controllerName);
redirectTargetDictionary.Add(REQUEST_ID_KEY, requestId);
filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);
Mais ça ressemble à un piratage. Existe-t-il un meilleur moyen d'ajouter des paramètres à la fonction QueryString
? (notez que mon objectif est d'obtenir un ActionFitler
qui réécrit les urls, je dois donc passer le paramètre dans le fichier QueryString
).