C# 会话在自定义操作筛选器中不起作用
我有一个ASP.NET自定义操作筛选器: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
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。好消息是你解决了你的问题。我为你感到高兴。