2 votes

Ajout de paramètres à QueryString depuis ActionFilter

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 ).

1voto

Josh Points 23923

Je pense que lorsque le moteur de routage aura été engagé, vous ne pourrez plus réécrire les URL. Le routage ne fonctionne pas vraiment de cette façon.

Vous pouvez toutefois manipuler les valeurs d'action qui sont utilisées pour invoquer une action en utilisant un filtre. Phil Haack a publié un article expliquant cette approche exacte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X