Я пытаюсь написать пользовательский 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
).