.NET Framework 4.X 中每个请求的新 ActionFilter 实例

问题描述 投票:0回答:0

似乎 ActionFilter 实例在

System.Web.Mvc
System.Web.Http
中的单独 Web 请求之间被重用/共享。通过测试 MVC 过滤器,“相同端点”对多个请求使用相同的过滤器实例。

如何在 .NET Framework 4.X(NOT .NET Core / 5+)中为 MVC 控制器和 ActionFilters 配置“每个请求的新 ActionFilter 实例”行为?如果不同,Web ApiControllers + ActionFilters?


更新:

通过确保我们的依赖项解析器在过滤器的

AuthenticateAsync
方法主体中为每个 HTTP 请求提供唯一的数据库会话/连接,我已经解决了我们的潜在问题,而无需为每个请求配置一个新的过滤器实例。这避免了在 HTTP 请求之间意外共享任何线程/请求特定实例状态的机会(在过滤器元数据/属性参数之外)。

这符合这个SO帖子的答案中的建议

...你不应该将实例状态存储在将在不同方法之间重用的动作过滤器中。

然而,与那个问题不同的是:

  • (a) 我已经知道过滤器被重用以及在什么情况下不同的请求看到相同的过滤器实例。
  • (b) 我想知道是否 possible 将 ActionFilters 配置为每个请求都是唯一的,这不是其他帖子所要求的,也不是其答案中包含的信息。

我很感激评论中的帮助,我真的很感激,因为它帮助我解决了根本问题。但是,我认为没有理由将此问题作为一个独立问题进行否决/投票关闭——我找不到为 .NET Framework anywhere 配置此行为的代码参考,尽管我可以为 .NET Core / .净 5+.


原文:

由于一些遗留代码的决定,我们对一个期望这些 ActionFilters 被限定范围/唯一“每个请求”的设置有点执着,因此我们会定期遇到这样的问题,

已经有一个打开的 DataReader 与此连接关联...

由于无意中在接触数据库的过滤器中共享了连接。如果相关的话,我们的项目目前正在使用 StructureMap for DI / IoC & NHibernate / MySQL 作为我们的 ORM / DB 后端。

asp.net-mvc asp.net-web-api nhibernate structuremap .net-4.6
© www.soinside.com 2019 - 2024. All rights reserved.