在.NET Core中在控制器之外访问HttpContext

7

我无法在控制器外访问Session变量。有200多个示例建议添加;

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

services.AddHttpContextAccessor();

并使用

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

但是,没有人提到如何从我的控制器调用这个类。我该如何到达那个类?

如果将它改为静态,则需要绕过构造函数。如果我创建它,我需要httpcontextaccessor来构造。

对于想学习更多为什么我这样做的人,我想编写一个包括加密、解密数据库表行ID以在视图中屏蔽值+会话变量的方法的类,以确保其不被修改。

此外,我希望DummyReference是静态的,这样我就可以轻松地达到DummyReference.EncryptValue或DecryptValue。


4个回答

9
不要在控制器之外使用。相反,应该使用。
在静态类中可以这样写;
private static HttpContext _httpContext => new HttpContextAccessor().HttpContext;

无论在哪里,您仍然需要服务,而我们在控制器中所做的事情也是如此。


4
同样的问题也发生在我身上。我找到了解决方法,将我的方法放入非控制器类(我想使用它的地方)。
var HttpContext = _httpContextAccessor.HttpContext;

var vUser =  _httpContextAccessor.HttpContext.Session.GetString("user");

3
根据Microsoft文档,添加。
builder.Services.AddHttpContextAccessor();

那么

private readonly IHttpContextAccessor _httpContextAccessor;

public UserRepository(IHttpContextAccessor httpContextAccessor) =>
    _httpContextAccessor = httpContextAccessor;

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接