1
我正在尝试编写一个自定义ActionFilter
,它会将请求ID附加到QueryString
(如果它还没有)。将参数添加到来自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;
}
}
一种方法来添加参数的查询字符串,我发现是动作重定向到自身与请求ID添加到路由值,如:
RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
redirectTargetDictionary.Add("action", actionName);
redirectTargetDictionary.Add("controller", controllerName);
redirectTargetDictionary.Add(REQUEST_ID_KEY, requestId);
filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);
但这种看起来像一个黑客。有没有更好的方法将参数添加到QueryString
? (请注意,我的目标是实现重写URL的ActionFitler
,所以我必须通过参数QueryString
)。
感谢您的及时回复。为行动添加一个参数对我来说不起作用,因为我希望它可以在回发中使用。 – 2012-03-27 04:40:15