Lukas Hieronimus Adler
Lukas Hieronimus Adler

Reputation: 1094

Access Session by ActionFilterAttribute in .NET CORE

I tried to access the session-value by using the ActionFilterAttribute in .NET CORE. Therefore i use the following code:

A normal .NET Core Controller which gets the annotation [SessionCheck].

[SessionCheck]
public class HomeController : Controller
{
}

These class is extended by the ActionFilterAttribute Class and overrides the OnActionExecuted Method, where i would like to access the session value. Is there a possibility? I could only access the Key but not the session value.

public class SessionCheck:ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext context)
    {
        var session = context.HttpContext.Session;
        //var mySessionValue = session["user"];
    }
}

My main problem is, that i have a session value which describes where i have to route my request. If there is a special value in, i would like to route my request to Location A, otherwise to Location B.

Is there another possibility to do that?

Upvotes: 5

Views: 3804

Answers (2)

Naman Upadhyay
Naman Upadhyay

Reputation: 537

public class SessionCheck : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext actionExecutingContext)
    {
        if (actionExecutingContext.HttpContext.Session.GetString("user") == "User One")
        {
            actionExecutingContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
            {
                controller = "LocationA Controller",
                action = "LocationA Action",
                returnurl = Microsoft.AspNetCore.Http.Extensions.UriHelper.GetEncodedUrl(actionExecutingContext.HttpContext.Request)
            }));
        }
        else
        {
            actionExecutingContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
            {
                controller = "LocationB Controller",
                action = "LocationB Action",
                returnurl = Microsoft.AspNetCore.Http.Extensions.UriHelper.GetEncodedUrl(actionExecutingContext.HttpContext.Request)
            }));
        }
    }
}

Write SessionCheck class as above you can set your special value by typing HttpContext.Session.SetString("user", "User One"); in where you want to set also you can use multiple if-elseif like the same, This is working in .Net Core 3.1.

Upvotes: 1

Suresh Kamrushi
Suresh Kamrushi

Reputation: 16086

I have same issue, you can do something like below:

filterContext.HttpContext.Session.GetString("user");

Upvotes: 8

Related Questions