gpt4 book ai didi

c# - aspnet vNext ActionFilter 和 TempData

转载 作者:太空狗 更新时间:2023-10-29 23:06:43 26 4
gpt4 key购买 nike

我正在尝试在 aspnet vNext 中创建一个 ActionFilter。在此过滤器中,我想访问 TempData 和 ViewData(两者都在以前版本的 Controller 中可用)。我覆盖了该方法public override void OnActionExecuting(ActionExecutingContext filterContext)

进入filterContext 我有 Controller 但是是object而不是 ControllerBase .我应该是一个 ControllerBase,因为在以前版本的 MVC 中,ControllerContext(ActionExecutingContext 的基类)是一个 ControllerBase, here是codeplex中的源代码。我知道这可能是因为 POCO Controller 。

所以,问题是,如果 Controller 是对象,如何访问 TempData 和 ViewData。简单地做一个向下转换(像这样的 (Controller)filterContext.Controller)或者有一个最好的方法来做到这一点。

更新

如果在 this blog post 中解释,我想实现但使用 aspnet 5。

最佳答案

要从操作过滤器中访问 TempData,您可以获得名为 ITempDataDictionary 的服务来自 DI。

要从 DI 获得此服务,您可以执行类似 actionContext.HttpContext.RequestServices.GetRequiredService<ITempDataDictionary>() 的操作来自你的 OnActionExecuting方法。如果您愿意,也可以通过使用 ServiceFilterAttribute 来使用构造注入(inject)。

注意:
默认情况下,TempData 取决于 Session功能(即 TempData 的数据存储在 session 中),因此您需要做一些事情才能使其正常工作。

  • 引用 Microsoft.AspNet.SessionMicrosoft.Framework.Caching.Memory包。

  • 在你的ConfigureServices方法,请执行以下操作:

    services.AddCaching();
    services.AddSession();
  • 在你的Configure方法,注册 Session中间件(这是为传入请求创建/附加 session 的中间件)并在 注册 MVC 之前执行此操作。

    app.UseSession();
    app.UseMvc(...)

关于c# - aspnet vNext ActionFilter 和 TempData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30432766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com