【问题标题】:Access Session by ActionFilterAttribute in .NET CORE通过 .NET CORE 中的 ActionFilterAttribute 访问会话
【发布时间】:2020-03-17 16:52:17
【问题描述】:

我尝试使用 .NET CORE 中的 ActionFilterAttribute 访问会话值。因此我使用以下代码:

获取注解 [SessionCheck] 的普通 .NET Core 控制器。

[SessionCheck]
public class HomeController : Controller
{
}

这些类由 ActionFilterAttribute 类扩展并覆盖 OnActionExecuted 方法,我想在其中访问会话值。有没有可能?我只能访问 Key 而不能访问 session 值。

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

我的主要问题是,我有一个会话值,它描述了我必须在哪里路由我的请求。如果有特殊值,我想将我的请求路由到位置 A,否则路由到位置 B。

还有其他可能吗?

【问题讨论】:

  • "我只能访问密钥,不能访问会话值。"你是什​​么意思?它是空的吗?这就是您访问会话的方式。如果为 null,则表示尚未设置。

标签: .net-core asp.net-core-2.1


【解决方案1】:

我有同样的问题,你可以这样做:

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

【讨论】:

    【解决方案2】:
    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)
                }));
            }
        }
    }
    

    如上所述编写SessionCheck 类,您可以通过在要设置的位置键入HttpContext.Session.SetString("user", "User One"); 来设置您的特殊值,也可以使用多个if-elseif,这在.Net Core 3.1 中有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-05
      相关资源
      最近更新 更多