Asp.net core如何使用Session


轉自:https://tahirnaushad.com/2017/08/18/asp-net-core-session-state/

Asp.net core使用session:

在nuget 安裝Microsoft.AspNetCore.Session 

在新建Asp.net core應用程序后,要使用session中間件,在startup.cs中需執行三個步驟:

1.使用實現了IDistributedcache接口的服務來啟用內存緩存。(例如使用內存緩存)

 //該步驟需在addsession()調用前使用。 

2.調用addsession方法

3.使用usesession回調(usesession需在useMvc()方法前調用)

 public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                options.CheckConsentNeeded = context => false;  //注意這里需要設置為false,默認為true
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
            //注冊數據庫上下文
            services.AddDbContext<IgbomContext>();
            services.AddTransient<IRepository<Device>, DeviceRepository>();
            services.AddTransient<IRepository<User>, UserRepository>();
            services.AddTransient<IRepository<MenuRoot>, MenuRootRepository>();
            services.AddDistributedMemoryCache();
            services.AddSession();
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }
            app.UseSession();
            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }

  

存儲對象

HttpContext.Session(實現了ISession接口)沒有提供保存復雜對象的方法,然而我們可以通過序列化對象為字符串來實現這個功能:

public static class SessionExtensions
{
    public static void SetObject<T>(this ISession session, string key, T value)
    {
        session.SetString(key, JsonConvert.SerializeObject(value));
    }
 
    public static T GetObject<T>(this ISession session, string key)
    {
        var value = session.GetString(key);
        return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);
    }
}

  

JsonConvert是Newtonsoft.Json庫的一個靜態類,可以方便的在.Net類型和JSON類型之間轉換,VS可以快速添加:

接下來,我們就可以使用這些擴展方法:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseSession();
 
    app.Use(async (context, next) =>
    {
        context.Session.SetObject("CurrentUser",
            new UserInfo { Username = "James", Email = "james@bond.com" });
        await next();
    });
 
    app.Run(async (context) =>
    {
        var user = context.Session.GetObject<UserInfo>("CurrentUser");
        await context.Response.WriteAsync($"{user.Username}, {user.Email}");
    });
}  

  

 

通過依賴注入訪問

我們可以通過構造函數注入方式來使用會話狀態(IHttpContextAccessor),然后通過這個接口來訪問HttpContext屬性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM