我想确保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添加参数.有什么 idea 吗?

推荐答案

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相关问答推荐

此版本的 SQL Server 不支持用户实例登录标志.连接将关闭

如何在 ASP.NET 中以 'YYYY-MM-DD' 格式获取当前日期?

在 aspx 页面中使用 if else 和 eval

asp.net 单选按钮分组

将 NUnit 添加到 ASP.NET MVC 测试框架的选项中

使用进程外会话状态的 ASP.NET 应用程序中的 SQL Server 连接问题

如何使用 javascript 获取 MVC 应用程序的基本 URL

OnCheckedChanged 事件未触发

我可以根据角色隐藏/显示 asp:Menu 项吗?

等待本地主机,永远!

如何从 RouteData 获取路由名称?

ASP.NET IIS - 请求何时排队?

ASP.NET URL 重写

防止在 Visual Studio 2008 ASP.NET Web 窗体中复制粘贴时自动生成 ID

如何从后面的 ASP.NET 代码访问 HTML 表单输入

.NET AJAX 调用 ASMX 或 ASPX 或 ASHX?

IIS 是否执行非法字符替换?如果是这样,如何阻止它?

在 ASP.NET Web API 2 中禁用 *all* 异常处理(为我自己腾出空间)?

DropDownList 的 SelectedValue 与 SelectedItem.Value

使用 FileUpload Control 获取文件的完整路径