c# - 从外部库并发访问 HttpContext

标签 c# asp.net asp.net-mvc concurrency asp.net-mvc-5

我需要能够轻松获取我们在 MVC 项目外部的程序集中运行的大量查询的用户名。我只需为所有调用添加一个参数,但实际上有数百个调用。

我的同事建议我传递一个对 HttpContext 的静态引用(大概在 OnApplicationStarted 或类似的东西中)并从那里获取用户名。

HttpContext 始终包含与当前用户 session 相关的信息。我对此的担忧是,如果我的对象(存在于单独的程序集中)不会确切地知道从哪个用户中提取信息,并且虽然这可能适用于单个用户,但它会提取错误的用户名用户开始访问系统。

这是识别用户名的可行方法吗?

HttpContext如何知道当前用户是哪个用户?该机制是否在项目之外被切断?

最佳答案

HttpContext 实例不是全局的 - 它是特定请求的上下文。因此,例如,如果您正在执行 Controller 操作并调用 HttpContext (即 Controller.HttpContext),那么您正在处理该请求的上下文。因此,不存在上下文适用于哪个用户的问题 - 它适用于发起该请求的用户。

您不想从 OnApplicationStarted 引用它。它要么不可用,要么将成为当前请求的上下文。

话虽这么说,如果您需要的是用户名,那么我不确定您为什么要传递整个 HttpContext。函数应该只接收它需要的参数。如果需要用户名,您可以从 HttpContext.User.Identity.Name 获取。这将使其他库更容易测试。如果调用另一个库但不是从 Web 应用程序调用怎么办?那么就不会有 HttpContext 传递给它。

关于c# - 从外部库并发访问 HttpContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36794094/

相关文章:

Asp.net ajax+ Jquery : EndRequestHandler(sender, 参数)

C# & XNA - 2D 引擎 - 来自汽车的 Group Sprites

仅在命名空间内公开类的 C# 访问修饰符

c# - ExecuteRegisteredAsyncTasks 是否释放请求处理线程来服务其他请求?

asp.net - 为什么仅在使用 SSL 和端口 443 时我在端口 80 上收到套接字拒绝错误?

asp.net-mvc - ASP.NET MVC : Best Practices for dbml files

asp.net-mvc - Microsoft.Web.RedisSessionStateProvider 不保存值

asp.net-mvc - 如何在ReactJs中使用路由?

c# - 公开强类型列表?

c# - 将多行插入 MS SQL Server 并检索所有新表 ID 的背面