gpt4 book ai didi

c# - HttpContext.Current.Session 始终为空

转载 作者:行者123 更新时间:2023-11-30 12:46:23 24 4
gpt4 key购买 nike

我知道这个话题已经出现了很多,但我还没有找到适合我的问题的。

我有一个派生自 ActionFilterAttribute 的 GuestTokenValidationAttribute 类,我在其中从 header 接收到一个 token 并将其用作字符串 token 。然后我想将该 token 添加到 session 中,但无论我做什么, session 始终为空。

请大家提供任何指导或帮助,我们将不胜感激,

下面的代码示例:

public class GuestTokenValidationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
string token;
try
{
token = actionContext.Request.Headers.GetValues("Authorization-Token").First();
}
catch (Exception)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized)
{
Content = new StringContent("Unauthorized User")
};
return;
}

if(string.IsNullOrEmpty(token))
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized)
{
Content = new StringContent("Unauthorized User")
};
return;
}

try
{
var repository = DependencyResolver.Current.GetService<IRepository<Guest>>();
var guest = repository.GetAll().FirstOrDefault(x => x.Token == token);
if(guest == null)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized)
{
Content = new StringContent("Unauthorized User")
};
return;
}

}
catch (Exception)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized)
{
Content = new StringContent("Unauthorized User")
};
return;
}




HttpContext.Current.Session.Add("guesttoken" ,token);

base.OnActionExecuting(actionContext);

}

最佳答案

MVC移植到 asp.net 以解决诸如 SessionViewState 之类的问题,这些问题是对网络本质的真正反对。如您所知,在 MVC 中,所有操作和响应都应被视为无状态请求,在处理请求之前和之后都不应留下任何内容,并假设 GC 将收集 ViewBags、Session、Variables 等中的所有数据.

因此,正如强烈建议的那样,处理此类事情的常用方法是使用通过纯 Web 提供的 native 工具,例如 cookie、html-forms、html-inputs、url 参数等。

关于c# - HttpContext.Current.Session 始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20538387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com