gpt4 book ai didi

c# - ASP.NET CORE 3.1 在未分配初始值的情况下读取 session 时出现 NULL 异常错误

转载 作者:行者123 更新时间:2023-12-04 10:52:27 25 4
gpt4 key购买 nike

HttpContext.Session.GetInt32 ("Id") 抛出 空异常 因为当我的 c# 代码首先在我的布局页面上运行时不会发生 session

Session ilk okunduğunda sanırım henüz oluşturulmamış olduğu için null exception fırlatıyor. hatta login sayfasında session girildikten sonra bile layout sayfasında okurken null exception fırlatıyor.


 public ActionResult Login(string sifre, string email)
{
var url = HttpContext.Session.GetString("url");

User UserSrgu = (from p in db.User
where p.Email == email && p.Sifre == sifre
select p).SingleOrDefault();
if (UserSrgu == null)
{
TempData["sayfaMsj"] = "Lütfen E-mail ve Şifrenizi doğru giriniz!!!";
return View();
}
if (UserSrgu.Onaylimi)
{
if (UserSrgu.ResimYol == null || UserSrgu.ResimYol == "")
{
UserSrgu.ResimYol = "/Content/nullimgs/no-image_ex.png";
}


**HttpContext.Session.SetInt32("Id", UserSrgu.Id);
HttpContext.Session.SetString("KAdi", UserSrgu.KAdi);
HttpContext.Session.SetString("AdSoyad", UserSrgu.AdSoyad);
HttpContext.Session.SetString("Email", UserSrgu.Email);
HttpContext.Session.SetString("ResimYol", UserSrgu.ResimYol);**




if (url != null)
{
url = HttpContext.Session.GetString("url");
}
else
{
url = "login";
}
return Redirect(url.ToString());
}
else
{
TempData["sayfaMsj"] = "Lütfen E-mail adresinize gelen linkten doğrulma yapınız!!!";
return View();
}
}

layout.cshtml 页面
@page
@using Microsoft.AspNetCore.Http
@using System.Text
@{

var contentKAdi = "";
var contentAdSoyad = "";
var contentEmail = "";
var contentResimYol = "";
int contentId = 0;

try
{
***usr = HttpContext.Session.Get<User>("user");
contentId = (int)HttpContext.Session.GetInt32("Id");
contentKAdi = HttpContext.Session.GetString("KAdi");***
}
catch
{
contentKAdi = "";
contentAdSoyad = "";
contentEmail = "";
contentResimYol = "";
contentId = 0;
}


}

启动文件
    public void ConfigureServices(IServiceCollection services)
{
var connection = Configuration.GetConnectionString("xxZZDatabase");
services.AddDbContext<xxZZContext>(option => option.UseSqlServer(connection));
services.AddHttpClient();
services.AddControllersWithViews();
services.AddHttpContextAccessor();
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(10);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
options.Cookie.Name = ".Erol.Aktepe";
});

services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});

services.AddApplicationInsightsTelemetry(Configuration);

services.AddDistributedRedisCache(options =>
{
options.InstanceName = "Oturum";
options.Configuration = "127.0.0.1";
});



services.AddMvc(options => options.EnableEndpointRouting = false)
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0);

}



[Obsolete]
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{

app.UseSession();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}


app.UseStaticFiles();


app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=xxxZZZ}/{action=Index}/{id?}");
});
app.UseMvc();

}

SessionExtensions.cs
public static class SessionExtensions
{
public static byte[] Get(this ISession session, string key);
public static int? GetInt32(this ISession session, string key);
public static string GetString(this ISession session, string key);
public static void SetInt32(this ISession session, string key, int value);
public static void SetString(this ISession session, string key, string value);
}

行动结果

.....
            if (HttpContext.Session.Get<User>("user") == default(User))
{
HttpContext.Session.Set<User>("user", UserSrgu);
var usr = HttpContext.Session.Get<User>("user");
}
HttpContext.Session.SetInt32("Id", UserSrgu.Id);
var id = HttpContext.Session.GetInt32("Id");

.....
UserSrgu.Id = 1 and UserSrgu -> full and id = null and usr = null

我通过使用 TempData 传递数据来传递 layout.cshtml 页面

最佳答案

1-在ConfigureServices方法请确保您已设置 CheckConsentNeeded为假。

services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});

2- 调用 AddSessionConfigureServices .
public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedMemoryCache();

services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
// Make the session cookie essential
options.Cookie.IsEssential = true;
});

3 英寸 Configure 中的方法启动.cs 你应该有 :
  app.UseSession();

关于c# - ASP.NET CORE 3.1 在未分配初始值的情况下读取 session 时出现 NULL 异常错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59417013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com