Arn*_*rty 31 asp.net asp.net-mvc redirecttoaction action-filter asp.net-mvc-3
我想确保QueryString中的特定参数,在我的情况下,request_id传播到重定向的操作.
比方说,我有一个动作First,
[HttpPost]
public ActionResult First() 
{
    ////////////////////
    // Lots of code ...
    ////////////////////
    return RedirectToAction("Second");
}
现在说,First回发中有一个参数QueryString,我想传递给Second动作.一种方法是传递RedirectToAction调用本身的值,
string requestId = Request.QueryString[REQUEST_ID_KEY];
return RedirectToAction("Second", new { REQUEST_ID_KEY = requestId });
但我必须在一系列操作中执行此操作,并且我不愿意将请求ID传播逻辑合并到操作中.如果我可以将其合并到一个内容中会更好ActionFilter,但我无法弄清楚如何从ActionFilter向QueryString添加参数.有任何想法吗?
Dar*_*rov 50
public class PreserveQueryStringAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var redirectResult = filterContext.Result as RedirectToRouteResult;
        if (redirectResult == null)
        {
            return;
        }
        var query = filterContext.HttpContext.Request.QueryString;
        // Remark: here you could decide if you want to propagate all
        // query string values or a particular one. In my example I am
        // propagating all query string values that are not already part of
        // the route values
        foreach (string key in query.Keys)
        {
            if (!redirectResult.RouteValues.ContainsKey(key))
            {
                redirectResult.RouteValues.Add(key, query[key]);
            }
        }
    }
}
然后:
[HttpPost]
[PreserveQueryString]
public ActionResult First() 
{
    ////////////////////
    // Lots of code ...
    ////////////////////
    return RedirectToAction("Second");
}
| 归档时间: | 
 | 
| 查看次数: | 11302 次 | 
| 最近记录: |