我正在制作一个项目,对于项目,我需要使用一个会话。我正在使用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”永远保持为空。
我很乐意得到一些帮助并最终解决这个问题!