在.net core中访问控制器外部的Httpcontext

Mop*_*ner 7 session httpcontext .net-core

我无法访问控制器外部的会话变量,他们建议您添加超过 200 个示例;

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

services.AddHttpContextAccessor();
Run Code Online (Sandbox Code Playgroud)

并使用

public class DummyReference
{
        private IHttpContextAccessor _httpContextAccessor;
        public DummyReference(IHttpContextAccessor httpContextAccessor)
        {
            _httpContextAccessor = httpContextAccessor;
        }
        public void DoSomething()
        {
            // access _httpcontextaccessor to reach sessions variables
        }
}
Run Code Online (Sandbox Code Playgroud)

但是,没有人提到如何从我的控制器调用此类。我怎样才能到达那个班级?

如果将其更改为静态,那么我需要绕过构造。如果我创建它,我需要 httpcontextaccessor 来构造。

对于想要了解更多为什么我这样做的人,我想编写包含加密、解密数据库表 RowID 之类的方法的类,以便使用 value+sessionvariable 在 VIEW 中进行屏蔽,以确保其不被修改。

另外,我希望 DummyReference 是静态的,这样我可以轻松访问 DummyReference.EncryptValue 或 DecryptValue。

hei*_*zza 9

不要在控制器之外使用IHttpContextAccessor 。相反,请使用HttpContextAccessor

在静态类中就像这样;

private static HttpContext _httpContext => new HttpContextAccessor().HttpContext;
Run Code Online (Sandbox Code Playgroud)

或者其他任何地方。当然,您仍然需要服务以及我们在控制器中所做的事情。


小智 4

同样的事情发生在我身上,我找到了将我的方法放入无控制器类中的解决方案(我想在其中使用它)

var HttpContext = _httpContextAccessor.HttpContext;

var vUser =  _httpContextAccessor.HttpContext.Session.GetString("user");
Run Code Online (Sandbox Code Playgroud)