会话在自定义操作筛选器中不起作用

时间:2015-08-05 01:35:05

标签: c# asp.net asp.net-web-api action-filter

我有一个ASP.NET自定义操作过滤器:

namespace Sample.Attributes
{
    [AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = false)]
    public class SampleValidator : ActionFilterAttribute
    {

        public override Task OnActionExecutingAsync(System.Web.Http.Controllers.HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken)
        {
            var tokenValidated = HttpContext.Current.Session["TokenValidated"];
            if (tokenValidated == null || tokenValidated != "true")
            {
                HttpContext.Current.Session["TokenValidated"] = "true";
            }

            return base.OnActionExecutingAsync(actionContext, cancellationToken);
        }
    }
}

但是,HttpContextFactory.Current.Session为NULL。我需要在此自定义属性中的会话中存储交叉请求状态信息。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果会话在过滤器中不起作用,则有几种方法可用于存储全局变量,例如cookie和静态变量。

试试这个:

public static Boolean TokenValidated {get; set;}

您可以直接在代码中的任何位置设置TokenValidated,例如:

TokenValidated = true;

您也可以在代码中的任何位置获取TokenValidated。