将参数从控制器传递给ActionFilterAtribute

时间:2018-03-04 18:48:43

标签: c# .net asp.net-mvc httpcontext action-filter

我正在制作一个项目,对于项目,我需要使用一个会话。我正在使用ActionFilters在我的方法之前从我的会话中获取数据,并在我的方法之后将其放回。

现在我遇到的问题是我从未将我的数据放入OnActionExecuted的会话中。我一直在寻找这个问题很长一段时间,但仍然没有找到它。可能看起来每个网站都没有。

这是我的动作过滤器:

public class SessieFilter : ActionFilterAttribute
{
    private readonly ISessieRepository _sessieRepository;
    private string _sessieCode;

    public SessieFilter(ISessieRepository sessieRepository) {
        _sessieRepository = sessieRepository;
    }

    public override void OnActionExecuting(ActionExecutingContext context) {
        //_sessie = context.HttpContext.Session.GetString("Sessie") == null ?
        //    new Sessie() : JsonConvert.DeserializeObject<Sessie>(context.HttpContext.Session.GetString("Sessie"));
        _sessieCode = context.HttpContext.Session.GetString("Code") == null ?
            "" : context.HttpContext.Session.GetString("Code");
        context.ActionArguments["Code"] = _sessieCode;
        base.OnActionExecuting(context);
    }

    public override void OnActionExecuted(ActionExecutedContext context) {
        //context.HttpContext.Session.SetString("Sessie", JsonConvert.SerializeObject(_sessie));
        context.HttpContext.Session.SetString("Code", _sessieCode);
        base.OnActionExecuted(context);
    }

}

应该将我的“SessieCode”提供给我的OnActionExecuted的代码,以便我可以将它保存在会话中:

public IActionResult Overzicht(string Code, string SessieCode) {
        Sessie sessie = _sessieRepository.GetBy(SessieCode);
        Code = SessieCode;
        if (sessie != null)
        {
            IList<Groep> groepjes = new List<Groep>() ;
            foreach(var groep in sessie.Groepen) {

                if (!groep.NeemtDeel)
                {
                    groepjes.Add(groep);
                }
            }
            return View(groepjes);
        }
        return RedirectToAction(nameof(Index));
    }

通过整个控制器,我使用相同的“Sessie”。所以我想在会话中保存“SessieCode”,这样我就可以通过“SessieRepository”查找“Sessie”。

我的actionArgument [“Code”]被赋予Controller很好,但它没有给OnActionExecuted,我的Filter中的值“_sessieCode”永远保持为空。

我很乐意得到一些帮助并最终解决这个问题!

0 个答案:

没有答案