在控制器外部访问会话状态

时间:2018-08-21 07:09:29

标签: c# asp.net .net session asp.net-core

我正在尝试访问控制器外部的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; }
}

(数据已转换为两倍)。

我该怎么办?

1 个答案:

答案 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");
    }
}