2

我正在建立用户调用的操作的历史记录。为此,我需要原始查询字符串中的所有参数。这需要在 OnActionExecuted(动作之后)中完成,因为一些描述信息存储在 filterAction.Result.Model.MyDescription 中。

在 ActionExecutedContext 上,我无权访问 ActionParameters,RoutesValues 仅包含操作、控制器、id 和文化。它不包含查询字符串中包含的任何其他参数。

如何保留从 OnActionExecuting 到 OnActionExecuted 的 ActionParameters?

控制器:

[ReportHistoryLink]
public ActionResult Index(int id, DateTime at, string by)
{
    var model = new ReportModel();
    model.ReportDescription = "Some logic get the ReportDescription";
    return View("Index", model);
}

动作过滤器:

public class ReportHistoryLinkAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var model = (IModelWithReportDescription)((ViewResult)filterContext.Result).Model;
        var description = model.ReportDescription;

        var boxedId = filterContext.RouteData.Values["id"];
        var id = Convert.ToInt32(boxedId);
        if (id != 0 && !string.IsNullOrWhiteSpace(targetDescription))
        {
            var link = new HistoryLink
            {
                Id = id,
                Description = description,
                Route = filterContext.RouteData.Values  //This doesn't contains the "at and by parameters"
            };
        }
    }
}
4

1 回答 1

3

您可以使用

filterContext.HttpContext.Request.QueryString["id"]
于 2013-09-19T23:39:44.197 回答