- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有两种正常的方法可以访问用户的 HttpContext,通过:
httpContextAccessor.HttpContext
this.HttpContext
HttpContextAccessor
的使用,我们将它们主要用于为每个请求共享的通用单例服务(例如日志记录、 session 处理等)。我认为这应该是线程安全的
HttpContextAccessor
应该知道如何处理它,但我看到这条推文让我失望:
https://twitter.com/davidfowl/status/907248318538903553
最佳答案
你混淆了两个不同的概念。线程安全仅与 HTTP 请求相关,因为 HTTP 请求需要使用线程。不过,差不多就是这样。 HttpContext 是请求范围的,因此在单个请求的上下文中,假设您只停留在一个线程上或所有操作线程在该特定请求的上下文中运行,您将不会发生溢出。
当你开始触发在后台运行的线程时,事情变得不稳定,即在请求管道之外。在这种情况下,HttpContext 可能存在也可能不存在,或者后台线程可能与原始线程不同。这就是线程不安全的来源。
多空,无论HttpContext
线程安全是错误的问题。相反,您需要询问在什么上下文中线程上正在执行什么工作。如果您在请求管道中,那么 HttpContext
实际上将是线程安全的,但这需要捕获您触发的所有线程,这几乎否定了使用多个线程的有用性。您不妨只在原始线程上完成所有工作。处理 Web 请求与桌面或移动应用程序不同。在后者中,您需要保持主线程或 UI 线程空闲,因此必须分离线程。网络不是这样工作的。所有线程都是 transient 的,服务于特定请求,然后返回到池中。
关于asp.net - HttpContextAccessor 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53048025/
有两种正常的方法可以访问用户的 HttpContext,通过: 为服务注入(inject)的 IHttpContextAccessor(和 HttpContextAccessor)如下:httpCon
有没有办法实现下一个行为? public static void Configure(IServiceCollection services) { services.AddScoped(typ
我有一个无法解释的奇怪问题。 我的 Blazor 服务器端应用程序中有一个帮助程序类,它为我的应用程序执行 arb 功能。我在启动时添加了 services.AddHttpContextAccesso
我有一个无法解释的奇怪问题。 我的 Blazor 服务器端应用程序中有一个帮助程序类,它为我的应用程序执行 arb 功能。我在启动时添加了 services.AddHttpContextAccesso
使用 ASP.NET Core 3.0 Preview 5,我正在尝试访问 HttpContextAccessor从内部 AppState我正在注入(inject)我的应用程序的类。 不幸的是,我一直
我创建了一个 .NET Core 项目(一个类库),它也以 .NET 4.6 为目标,它需要能够访问当前的 HTTP 上下文。我看到我们不能再使用静态的 HttpContext.Current,必须注
我们覆盖 SaveChangesAsync() 以自动更新 DateCreated、CreatedBy、LastDateModified 和 LastModifiedBy。使用 CreatedBy 和
现在我正在努力将 .Net MVC 应用程序转换为 .Net Core 应用程序 要记录我们在 MVC 中使用“HttpContext”的事件 LoggerException loggerExcept
我正在将异常记录到 asp.net core 中的数据库。 MyDbContext 采用 HttpContextAccessor 参数。因此,我将 HttpContextAccessor 发送到 My
我读过关于配置 IHttpContextAccessor如 services.AddSingleton范围,但我也读到它正在“本地异步”工作,我也知道异步在 ASP.Net 中的复杂工作,我的意思是,
我有一个在 .NET Core 2.0 上运行的简单 ServiceStack 项目。这在 Windows 上工作正常,但在 Linux 上失败。使用完全相同的代码(见下文)。 服务被注入(injec
在我的 Asp.Net Core 应用程序中,我想向我的 ClaimsIdentity 添加自定义声明,以便我可以在应用程序的不同层中访问这些声明。为此,我添加了以下代码 启动 services.Ad
我是一名优秀的程序员,十分优秀!