【发布时间】:2012-04-10 14:49:10
【问题描述】:
我正在尝试编写一个自定义的ActionFilter,如果QueryString 还没有请求ID,它将附加一个请求ID。
类似这样的:
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 添加参数? (注意,我的目标是实现一个ActionFitler 重写url,所以我必须在QueryString 中传递参数)。
【问题讨论】:
-
你有没有找到比重定向到自我更好的方法?
-
Afaik,找不到更好的解决方案。
标签: asp.net asp.net-mvc-3 asp.net-mvc-routing action-filter