gpt4 book ai didi

c# - System.InvalidOperationException 将 HttpContext.Session 与 use.Session() 一起使用;放

转载 作者:行者123 更新时间:2023-12-04 10:57:02 24 4
gpt4 key购买 nike

我正在为我的研究项目使用 Razor 页面开发 .NET Core 3.0 应用程序。该应用程序将使用登录功能,我想使用 session 发送数据并验证登录的用户。

为此,我决定在发布期间使用 HttpContext.Session 获取和设置字符串。

当我使用这条线时:HttpContext.Session.SetString("username", "test");
我收到错误:System.InvalidOperationException: 'Session has not been configured for this application or request.'
经过一番广泛的谷歌搜索并使用 Microsoft doc我似乎找不到解决方案。我到处都能得到需要包含的答案services.AddSessionapp.UseSession();在我做的 Startup.cs 文件中,这些都添加在 'UseMvc();' 之前线。

我已经用完了选项,我的软件老师不想给我任何帮助,除了我认为我根据 Microsoft 文档所做的“你使用的是正确的版本吗”。

我错过了什么导致此错误?我怎样才能让 session 正常工作?我执行错了吗?

下面是我的 Startup.cs 类:

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

public IConfiguration Configuration { get; }

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedMemoryCache();
services.AddRazorPages();
services.AddSession(options =>
{
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
options.IdleTimeout = TimeSpan.FromSeconds(10);
});
services.AddMvc(option => option.EnableEndpointRouting = false);
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}

app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

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

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSession();

app.UseMvc();
}
}

值得注意的是当我使用 app.UseHttpContextItemsMiddleware();之间 app.UseSession();app.UseMvc();我收到一个 Intellisense 错误,指出 IApplicationBuilder 没有此方法。在 Microsoft 文档中显示此字符串包含在 Startup.cs 中。

最佳答案

Everywhere I get the answer that I need to include services.AddSession and app.UseSession(); in my Startup.cs file which I do, These are all added before the 'UseMvc();' lines.



你是对的。但是,调用 UseMvc()或调用 UseRouting() + UseEndpoints() ,但不要同时调用它们。从 ASP.NET 3.0 开始,我建议你应该使用 UseRouting() + UseEndpoints()而不是 UseMvc() .

在您的原始代码中, UseEndpoints()UseSession() 之前触发这使得 MVC/Razor 页面在 UseSession() 之前执行.要解决该问题,请更改您的代码,如下所示:

公共(public)无效配置(IApplicationBuilder 应用程序,IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
别的
{
app.UseExceptionHandler("/错误");
}

app.UseHttpsRedirection();
app.UseStaticFiles();
//将 UseSession 放在要获取 session 的行之前。
//至少,你应该把它放在 `app.UseEndpoints(...)` 之前
应用程序.UseSession();

app.UseRouting();

app.UseAuthorization();

app.UseEndpoints(端点 =>
{
端点.MapRazorPages();
//如果你需要 mvc,别忘了
//添加 `services.AddControllersWithViews`
//并添加这一行
端点.MapControllerRoute(
名称:“默认 Controller ”,
模式:“{controller=Home}/{action=Index}/{id?}”);
});

app.UseHttpsRedirection();
app.UseStaticFiles();
应用程序.UseSession();

app.UseMvc();
}

关于c# - System.InvalidOperationException 将 HttpContext.Session 与 use.Session() 一起使用;放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59104221/

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