我正在尝试访问控制器外部的ASP.Net Core Web应用程序中以Session状态保存的数据,但是httpcontext始终为null,如何将状态发送给类?
我已经在Startup.cs中添加了正确的语句以使用会话。
此外,在控制器内部使用此功能非常正常:
HttpContext.Session.SetString("Threshold",threshold);
HttpContext.Session.GetString("Treshold");
在控制器内访问时,两者都可以正常工作,但我想在另一个类中访问此数据。当前,我仅使用静态变量,但这当然不是可行的方法,我想在此处访问会话:
public class ImageAnalysisExtensionValues
{
public static double ConfidenceThreshold { get; set; }
}
(数据已转换为两倍)。
我该怎么办?
答案 0 :(得分:1)
您可以利用Asp.Net Cores依赖项注入并使用IHttpContextAccessor
接口。
您必须先在Startup.cs
类中注册它(它并不总是默认注册的-因此使用TryAddSingleton<>()
):
public void ConfigureServices(IServiceCollection services)
{
// ...
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
// ...
}
然后像这样使用它:
public YourClassOutsideOfController
{
private IHttpContextAccessor _contextAccessor;
public YourClassOutsideOfController(IHttpContextAccessor contextAccessor)
{
_contextAccessor = contextAccessor;
}
private void YourMethod()
{
var context = _contextAccessor.HttpContext;
context.Session.SetString("Threshold",threshold);
context.Session.GetString("Threshold");
}
}