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

时间:2019-07-05 11:40:47

标签: .net session core httpcontext

我无法在控制器外部访问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进行构造。

对于想了解更多信息的人,我想编写包含以下方法的类:加密,解密数据库表RowID,以便在VIEW中使用value + sessionvariable进行屏蔽以确保其未被修改。

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

3 个答案:

答案 0 :(得分:1)

不要在控制器之外使用 IHttpContextAccessor。而是使用 HttpContextAccessor

像这样在静态类中;

private static HttpContext _httpContext => new HttpContextAccessor().HttpContext;

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

答案 1 :(得分:0)

该代码为您提供当前的HttpContext。会话略有不同:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.2

答案 2 :(得分:0)

我也一样 我找到了将方法放入no控制器类中的解决方案(我想在其中使用它)

var HttpContext = _httpContextAccessor.HttpContext;

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