9

I can't access Session variables outside controllers, there are over 200 examples where they advise you to add ;

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

services.AddHttpContextAccessor();

and use

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

But, no-one mentions how to call this class from my controller. How can I reach that class?

If changed it to static then I need bypass construct. If I create it I need httpcontextaccessor for construct.

For who wants learn more why I approached like that, I want to write class include methods like encrypt, decrypt database tables RowIDs for masking in VIEW with value+sessionvariable to ensure its not modified.

Also I want DummyReference to be static, that way I can easily reach DummyReference.EncryptValue or DecryptValue.

1

4 Answers 4

9

Don't use IHttpContextAccessor outside of controllers. Instead, use HttpContextAccessor.

Like this in static classes ;

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

Or anywhere else. You still need service of course and the thing we do in the controllers.

Sign up to request clarification or add additional context in comments.

Comments

6

the same happend to me I found the solution putting in my method into the no controller class (where I want to use it)

var HttpContext = _httpContextAccessor.HttpContext;

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

Comments

4

According to Microsoft docs

Add

builder.Services.AddHttpContextAccessor();

Then

private readonly IHttpContextAccessor _httpContextAccessor;

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

Comments

1

That code gets you the current HttpContext. Sessions are slightly different: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.2

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.