Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 会话在自定义操作筛选器中不起作用_C#_Asp.net_Asp.net Web Api_Action Filter - Fatal编程技术网

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

C# 会话在自定义操作筛选器中不起作用,c#,asp.net,asp.net-web-api,action-filter,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 OnActionExecutingAsyn

我有一个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为空。我需要将会话中的交叉请求状态信息存储在此自定义属性中。有什么想法吗?

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

试试这个:

public static Boolean TokenValidated {get; set;}
您可以在代码中的任何位置直接设置TokenValidated,例如:

TokenValidated = true;

您还可以在代码中的任何位置获得令牌验证。

该静态将使其成为全局状态;我不想那样。需要每个用户的设置。请尝试使用cookie。你知道如何使用cookie吗?如果你不知道,我将更新答案,展示如何使用cookie。我投票支持你的答案,因为我们最终使用了安全cookie和自定义标题的组合,以保持web api的restful。没有接受它作为答案,因为它没有真正回答我的问题。谢谢webtecki。好消息是你解决了你的问题。我为你感到高兴。