我需要能够轻松获取我们在 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/