Добавление параметров в QueryString из ActionFilter - PullRequest
1 голос
/ 27 марта 2012

Я пытаюсь написать пользовательский ActionFilter, который добавит идентификатор запроса к QueryString, если у него его еще нет.

Примерно так:

    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;
        }

    }

Один из способов добавить параметр в строку запроса, которую я обнаружил, - перенаправить действие на себя с помощью идентификатора запроса, добавленного к значениям маршрута, например:

  RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
  redirectTargetDictionary.Add("action", actionName);
  redirectTargetDictionary.Add("controller", controllerName);
  redirectTargetDictionary.Add(REQUEST_ID_KEY, requestId);

  filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);

Но этот вид выглядит каквзломатьЕсть ли лучший способ добавить параметры в QueryString?(обратите внимание, что моя цель - получить ActionFitler, который переписывает URL, поэтому я должен передать параметр в QueryString).

1 Ответ

1 голос
/ 27 марта 2012

Я считаю, что к тому времени, когда будет задействован механизм маршрутизации, вы не сможете переписывать URL-адреса.Маршрутизация на самом деле не работает таким образом.

Однако вы можете манипулировать значениями действия, которые используются для вызова действия, с помощью фильтра. У Фила Хаака есть статья, объясняющая этот точный подход.

...