【问题标题】:Accessing Httpcontext outside controller in .net core在.net核心中访问控制器外部的Httpcontext
【发布时间】:2019-11-16 01:10:17
【问题描述】:

我无法访问控制器外部的 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。

【问题讨论】:

标签: session .net-core httpcontext


【解决方案1】:

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

像这样在静态类中;

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-09
        • 1970-01-01
        • 2017-05-14
        • 2010-12-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多