我正在建立用户调用的操作的历史记录。为此,我需要原始查询字符串中的所有参数。这需要在 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"
};
}
}
}