asp.net - 在 RedirectToAction 调用中传播 QueryString 参数

标签 asp.net asp.net-mvc asp.net-mvc-3 action-filter redirecttoaction

我想确保 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。有什么想法吗?

最佳答案

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

关于asp.net - 在 RedirectToAction 调用中传播 QueryString 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9883553/

相关文章:

jquery - 如何通过 jQuery 更改 SVG 元素的颜色(拖动选定的颜色)

asp.net - 如何更新 asp.net 网站(只是更改了文件)

asp.net-mvc - FormsAuthentication.SetAuthCookie 与 FormsAuthentication.Encrypt

c# - 将数据从 ASP.NET MVC Controller 推送到 View

.net - Asp.Net Mvc 实用程序和帮助程序

asp.net-mvc - 处理未授权使用自定义属性

c# - 反编译使用预编译工具生成的aspx页面

asp.net - 子目录中所有文件的 Azure 访问 token

asp.net-mvc-3 - UrlHelper.GenerateUrl

asp.net-mvc-3 - 使用接口(interface)作为局部 View 的模型类型+数据注释