【问题标题】:Unable to set "Session" variable MVC 5无法设置“会话”变量 MVC 5
【发布时间】:2021-04-09 17:36:12
【问题描述】:

在我的控制器中,我将模型传递给查看

public IActionResult Forgotpassword()
{
    System.Web.HttpContext.Current.Session["sessionString"] = "sample";

    Forgotpasswordinfo Vmodel = new Forgotpasswordinfo();
    return View(Vmodel);
}

我使用System.Web.HttpContext.Current.Session["sessionString"] = "sample"; 来创建一个会话变量,但它显示一个错误,说 HttpContext 不存在!?我错过了什么?

【问题讨论】:

  • 在我看来如何访问它?我正在尝试 @session["something"] 但会话不存在
  • HttpContext 在我看来不存在,这就是我在控制器中设置会话变量的问题,就像所说的那样,它现在在我看来有效,我想检查该会话变量的值
  • 顺便说一句,根据您的评论,上面的代码看起来像是在asp.net mvc(不是asp.net core)中?标记它们太令人困惑了,因为这两个框架之间的代码可能完全不同,就像在本例中使用 Session 一样。
  • 一种更简单的方法是将新密码字段与辅助安全信息表单一起包含。所以只需提交一次,如果验证成功,您可以立即重置用户密码(一次提交,一次往返/请求)。它更简单,但可能不是一个非常漂亮的用户体验。
  • @iamaaarianme:看看Session and state management in ASP.NET Core。您应该使用Context.Session.GetString()/Context.Session.SetString() 来访问会话参数。但是,如果你在谈论ASP.NET Core,请不要使用 ASP.NET MVC 标签。

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


【解决方案1】:

下面的代码展示了如何设置内存中的会话提供者:

public class Startup
{    
    //...
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDistributedMemoryCache();

        services.AddSession(options =>
        {
            options.Cookie.Name = ".TestApp.Session";                
            options.IdleTimeout = TimeSpan.FromSeconds(30);
            options.Cookie.IsEssential = true;
        });

        services.AddControllersWithViews();
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        //...
        app.UseSession();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapDefaultControllerRoute();
            endpoints.MapRazorPages();
        });
    }
}

在调用UseSession 之前无法访问HttpContext.Session

在控制器中设置变量:

using Microsoft.AspNetCore.Http;

public IActionResult Index()
{
    HttpContext.Session.SetString("Parameter", "bla bla");
    return View();
}

获取视图中的参数(Index.cshtml)

@using Microsoft.AspNetCore.Http; 
@{    
    string parameter = Context.Session.GetString("Parameter");
}

上面的代码大部分是来自 Microsoft 文档的示例的一部分。详情请见Session and state management in ASP.NET Core

【讨论】:

    猜你喜欢
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 2017-07-21
    相关资源
    最近更新 更多