Asp.net mvc 尚未为此应用程序或请求错误配置会话

Asp.net mvc 尚未为此应用程序或请求错误配置会话,asp.net-mvc,asp.net-web-api,Asp.net Mvc,Asp.net Web Api,我是asp.net的新手,最近我遇到了一个例外: System.InvalidOperationException异常 例外情况的详细说明如下: 尚未为此应用程序或请求配置会话 下面是发生这种情况的代码片段: [HttpPost] public object Post([FromBody]loginCredentials value) { if (value.username.Equals("Admin")

我是asp.net的新手,最近我遇到了一个例外:

System.InvalidOperationException异常

例外情况的详细说明如下:

尚未为此应用程序或请求配置会话

下面是发生这种情况的代码片段:

[HttpPost]
        public object Post([FromBody]loginCredentials value)
        {
            if (value.username.Equals("Admin")
                &&
                value.password.Equals("admin"))
            {
                HttpContext.Session.Set("userLogin", System.Text.UTF8Encoding.UTF8.GetBytes(value.username)); //This the line that throws the exception.
                return new
                {
                    account = new
                    {
                        email = value.username
                    }
                };
            }
            throw new UnauthorizedAccessException("invalid credentials");
        }
我不知道为什么会这样,也不知道这个错误到底意味着什么。 有人能解释一下是什么引起的吗

HttpContext.Session.Add("name", "value");


在Startup.cs中,您可能需要调用

app.UseMvc之前的app.UseSession

app.UseSession();

app.UseMvc()以下代码适合我:

配置服务:

    public void ConfigureServices(IServiceCollection services)
    {
          //In-Memory
          services.AddDistributedMemoryCache();
          services.AddSession(options => {
          options.IdleTimeout = TimeSpan.FromMinutes(1);
          });              
          // Add framework services.
          services.AddMvc();
     }
配置HTTP请求管道:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
                      ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();
    if (env.IsDevelopment())
    {
       app.UseDeveloperExceptionPage();
       app.UseBrowserLink();
    }
    else
    {
       app.UseExceptionHandler("/Home/Error");
    }
    app.UseStaticFiles();
    app.UseSession();
    app.UseMvc(routes =>
    {
        routes.MapRoute(
           name: "default",
           template: "{controller=Home}/{action=Index}/{id?}");
     });
 }

我在.NETCore3.0RazorPages应用程序中遇到了完全相同的错误。因为,我没有使用
app.UseMvc()

因此,对于在.NET Core 3.0中遇到相同问题的任何人来说,下面是我在
配置中所做的工作,以使其正常工作:

app.UseSession(); // use this before .UseEndpoints
app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); });

如果您遇到了这个问题,并且您的启动设置正确:当我忘记等待并使用注入的IHttpContextAccessor的异步方法时,会出现这个错误。通过在通话中添加wait,问题得以解决

检查ASP NET Core 3.1的问题。请看是,这是一个类似问题的公认答案。services.AddSession();除此之外还有一点,特别是您需要先将Microsoft.AspNetCore.Session NuGet包添加到您的应用程序中,然后在适当的位置(如上图所示的app.UseMvc()上方)调用app.UseSession()这是一篇非常好的文章,详细介绍了这个过程以及使用情况。在.NET Core 3.0中,这不再适用,在那里你不应该再使用app.UseMvc()。我现在收到一个错误,说没有为此应用程序或请求配置会话。不确定现在把它放在哪里?Microsoft.AspNetCore.Session这是关键,它在3.1上工作。UseMvc()在.net core应用程序中为我工作。
AddDistributedMemoryCahce
非常重要。而且
AddSession
UseSession
的顺序也很重要。无需使用
AddSession
中的选项即可将此应用于工作。谢谢!将会话放在端点之前也解决了这一问题。将.UseSession()放在.UseEndpoints()之前也对我有效。非常感谢。这根本不能回答OP的问题。此外,Add和方括号[]方法在.NETCore中不再存在。
app.UseSession(); // use this before .UseEndpoints
app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); });