请原谅我缺乏编码知识以及提出正确问题的能力。
对于ASP.Net Web应用程序(核心)我还是很陌生,但我仍然很想知道。
在我当前的应用程序中,我有一个类,该类具有一个属性,可以从静态变量中获取该属性,该静态变量是在用户请求控制器时设置的。因此流程为:用户发送一个请求,该请求的主体中带有变量,如果未在主体中指定,则将StaticClass.StaticProperty(示例)设置为用户在主体中指定的变量(或默认= 0),并返回数据基于变量。 但是我想知道,由于此变量没有线程保证,因此当Web应用程序一次获得50,000个请求时,是否可以更改或弄乱它?
我调查了会话并尝试了以下操作:
service.AddSession(); //Not sure this even does anything?
HttpContext.Session.SetString //Setting this works in the controller, but I cant access it elsewhere by GetString
System.Web.HttpContext.Current.Session["test"] // Cant even access System.Web.Httpcontext, doesn't seem to exist.
HttpContext.Current //doesn't exist either
Session["test"] //doesn't exist either
我可以在某个地方发送会话吗?我很迷路。
不确定这是否有意义,如果需要,我会尝试详细说明。
谢谢。
编辑:信息更新。
我已将其添加到我的startup.cs中: services.AddSingleton();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
});
和
app.UseSession();
设置会话变量: https://i.imgur.com/CY8rcdk.png
使用会话变量: https://i.imgur.com/SuLJKzV.png
变量始终为空。
谢谢您的帮助。
答案 0 :(得分:0)
HttpContext仅可从特定于请求的内容访问,因为它是一个唯一请求的上下文。框架为每个请求创建了新的控制器实例,并注入了HttpContext。如果需要的话,开发人员的工作是进一步传递它。
我建议阅读有关此的文章:https://dotnetcoretutorials.com/2017/01/05/accessing-httpcontext-asp-net-core/
首先在startup.cs中,您需要将IHttpContextAccessor注册为如下服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
创建帮助程序/服务类时,可以随后注入IHttpContextAccessor并使用它。看起来与此不太相似:
public class UserService : IUserService
{
private readonly IHttpContextAccessor _httpContextAccessor;
public UserService(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public bool IsUserLoggedIn()
{
var context = _httpContextAccessor.HttpContext;
return context.User.Identities.Any(x => x.IsAuthenticated);
}
}