Mopener
Mopener

Reputation: 103

Accessing Httpcontext outside controller in .net core

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.

Upvotes: 9

Views: 17809

Answers (4)

Barna Norbert
Barna Norbert

Reputation: 41

According to Microsoft docs

Add

builder.Services.AddHttpContextAccessor();

Then

private readonly IHttpContextAccessor _httpContextAccessor;

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

Upvotes: 4

heimzza
heimzza

Reputation: 286

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.

Upvotes: 9

RICARDO VASQUEZ
RICARDO VASQUEZ

Reputation: 96

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");

Upvotes: 5

Robert Perry
Robert Perry

Reputation: 1954

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

Upvotes: 1

Related Questions