ユーザーが呼び出したアクションの履歴を作成しています。このためには、元のクエリ文字列のすべてのパラメーターが必要です。一部の説明情報は filterAction.Result.Model.MyDescription に保存されるため、これは OnActionExecuted (アクションの後) で実行する必要があります。
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"
};
}
}
}