Session 导航离开后未保存会话状态

Session 导航离开后未保存会话状态,session,asp.net-core,state,Session,Asp.net Core,State,我使用HttpContext.Session保存用户的一些发票信息, 当他/她去第三个站点支付费用并返回我的站点时,所有会话数据都是null,我不知道他/她发票号是什么! 我应该如何实现这一点?您可以注册应用程序以使用 Startup.cs 在ConfigureServices services.AddMvc().AddSessionStateTempDataProvider(); services.AddSingleton<IHttpContextAccessor, HttpContex

我使用
HttpContext.Session
保存用户的一些发票信息, 当他/她去第三个站点支付费用并返回我的站点时,所有会话数据都是
null
,我不知道他/她发票号是什么!
我应该如何实现这一点?

您可以注册应用程序以使用

Startup.cs 在
ConfigureServices

services.AddMvc().AddSessionStateTempDataProvider();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();  
services.AddSession();
我用这个控制器进行了测试

public IActionResult Index()
{
    var on = HttpContext.Session.GetString("ordernumber");

    HttpContext.Session.SetString("ordernumber", "123456");

    return Redirect("http://google.com");
}
在我们被重定向到google之后,如果我导航回localhost,我可以看到
上的
包含
“123456”

如果您想在视图中显示它,可以插入我们之前注册的
HttpContextAccessor

@using Microsoft.AspNetCore.Http;
@inject IHttpContextAccessor HttpContextAccessor

@{
    ViewData["Title"] = @HttpContextAccessor.HttpContext.Session.GetString("ordernumber");
}

您需要什么样的信息?TempData provider在您的解决方案中甚至没有发挥作用。事实上,如果您使用了它,您的解决方案将是错误的。此外,您不需要在视图中插入
IHttpContextAccessor
HttpContext
已可用于以下视图:
ViewContext.HttpContext
@ChrisPratt如果不注入contextaccessor,我无法使其工作,并且如果不注册临时提供程序,也无法设置会话值
@using Microsoft.AspNetCore.Http;
@inject IHttpContextAccessor HttpContextAccessor

@{
    ViewData["Title"] = @HttpContextAccessor.HttpContext.Session.GetString("ordernumber");
}