我尝试使用.NET CORE中的ActionFilterAttribute访问会话值。因此,我使用以下代码:
获取注释[SessionCheck]的普通.NET Core控制器。
[SessionCheck]
public class HomeController : Controller
{
}
这些类由ActionFilterAttribute类扩展,并且覆盖了我要访问会话值的OnActionExecuted方法。有可能吗?我只能访问密钥,而不能访问会话值。
public class SessionCheck:ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
var session = context.HttpContext.Session;
//var mySessionValue = session["user"];
}
}
我的主要问题是,我有一个会话值,该值描述了我必须将请求路由到何处。如果其中有一个特殊值,我想将我的请求路由到位置A,否则路由到位置B。
还有另一种可能性吗?
答案 0 :(得分:2)
我有同样的问题,您可以执行以下操作:
@Attr1=sql:variable(@someParam)
答案 1 :(得分:0)
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
,这在< strong> .Net Core 3.1 。