如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量

Posted

技术标签:

【中文标题】如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量【英文标题】:How to use session variables in ASP.NET Core 3.1 MVC using C# 【发布时间】:2021-09-26 05:01:19 【问题描述】:

我在处理会话对象时遇到了问题。设置和进入同一个控制器可以正常工作,我的麻烦是使用保存在另一个控制器中的会话中的信息,它对我不起作用,每次我得到一个空值。我曾经编写 php 代码,我只需要启动会话并获取值。不知道如何在 ASP.NET Core 3.1 MVC 中做到这一点。

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using partner2.Data;
using partner2.Helpers;
using partner2.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace partner2.Controllers

    public class UsuarioController : Controller
    
        public IActionResult Index()
        
            return View();
        

        public IActionResult Create()
        
            return View();
        

        [HttpPost]
        [ValidateAntiForgeryToken]//antiataque
        public IActionResult Create(Usuario usuario)
        
            Sql sql = new Sql();

            usuario.id_ativo = true;
            usuario.senha = GenerateMD5.CreateMD5(usuario.senha);
            sql.addUser(usuario);
            int userid = sql.getIdByCpf(usuario.cpf);
            HttpContext.Session.SetInt32("userid", userid);

            if (!sql.enderecoExists(usuario.cpf))
            
                return View("CreateAdress");
            

            return View();
        

        public IActionResult CreateAdress(Endereco endereco)
        
            Sql sql = new Sql();
            int? id = HttpContext.Session.GetInt32("userid");

            sql.addEndereco(endereco);

            return View();
        
    

【问题讨论】:

【参考方案1】:

对于 ASP.NET Core,您需要确保在 Startup-Class 中添加了所有需要的配置。我怀疑你缺少内存缓存。

public void ConfigureServices(IServiceCollection services)
    
        ....
        ....

        services.AddDistributedMemoryCache(); // <- This service

        services.AddSession(options =>
        
            options.IdleTimeout = TimeSpan.FromSeconds(10);
            options.Cookie.HttpOnly = true;
            options.Cookie.IsEssential = true;
        );
    

【讨论】:

【参考方案2】:

在我看来,您的 HttpContext.Session.SetInt32("userid", userid); 看起来不对。我认为你应该这样设置 HttpContext.Session.SetInt32("userid", usuario.id_) 因为除了您正在设置的那个之外,我没有看到另一个“用户 ID”。我可能是错的。你的sql.addUser(usuario); 也可能需要sql.SaveChanges(); 我也可能错了。 :) 希望我能帮上忙 :)

【讨论】:

以上是关于如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ASP.NET Core 同时制作 Razor Page 和 C# 代码框架?

如何在 C# 页面 ASP.NET Core MVC 上使用 SignInManager 和 Usermanager

如何在 Asp.NET Core WEB API 中使用 .Net (C#) 在 Payload 中创建具有自定义 JSON 声明的 JWT 令牌

Asp.net Core-在使用 javascript 或 C# 上传之前选择和验证 excel 文件?

如何使用 C# 和 ASP.Net Core 2.2 连接和收听外部 websocket url

如何使用 DataAnnotations & Regex - c# - ASP.NET Core