【问题标题】:Session has not been configured for this application or request error尚未为此应用程序配置会话或请求错误
【发布时间】:2018-11-10 04:35:41
【问题描述】:

我对 asp.net 很陌生,最近我遇到了这个异常:

System.InvalidOperationException

异常的细节说:

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

这是发生的代码sn-p:

[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");
        }

我不知道为什么会这样,也不知道这个错误究竟意味着什么。 有人可以解释一下可能导致这种情况的原因吗?

【问题讨论】:

标签: asp.net-mvc asp.net-web-api


【解决方案1】:

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

app.UseSession 在 app.UseMvc 之前

app.UseSession();  
app.UseMvc();  

为此,您还需要确保安装了 Microsoft.AspNetCore.Session nuget 包。

更新

你不需要使用 app.UseMvc();在 .NET Core 3.0 或更高版本中

【讨论】:

  • 是的,这是一个类似问题的公认答案。
  • services.AddSession();
  • 除此之外还有一点,特别是您需要先将 Microsoft.AspNetCore.Session NuGet 包添加到您的应用程序中,然后在适当的位置(就在 app.UseMvc() 上方,如图所示上面)你需要调用 app.UseSession() 这是一篇很好的文章,详细介绍了这个过程以及使用信息benjii.me/2016/07/…
  • 这在 .NET Core 3.0 中不再适用,您不应该再使用 app.UseMvc()。我现在收到一条错误消息,提示未为此应用程序或请求配置会话。不知道现在该放在哪里?
  • Microsoft.AspNetCore.Session 这是关键,它适用于 3.1 不要使用 app.UseMvc()
【解决方案2】:

以下代码适合我:

配置服务:

    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?}");
     });
 }

【讨论】:

  • 在 .net 核心应用程序中为我工作。
  • AddDistributedMemoryCahce 非常重要。 AddSessionUseSession 的顺序也很重要。 AddSession 中的选项不需要让它工作
【解决方案3】:

我在 .NET Core 3.0 Razor Pages 应用程序中遇到了完全相同的错误。因为,我没有使用app.UseMvc(),所以建议的答案对我不起作用。

因此,对于在 .NET Core 3.0 中遇到同样问题的任何人,这是我在 Configure 中所做的以使其正常工作:

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

【讨论】:

  • 谢谢!将会话放在端点之前也为我修复了它。
  • 将 .UseSession() 放在 .UseEndpoints() 之前也对我有用。谢谢!
【解决方案4】:

对于 .NET 6:

首先转到您的Program.cs(在此处添加代码)

我在构建器的最后部分插入了这个:

builder.Services.AddSession();

我在app.UseAuthorization();之后添加了这个

app.UseSession();

最终输出:


注意:我不知道这是否真的是放置代码的“正确行”,但这对我有用。 (我还是 ASP.NET 的初学者)

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:
      HttpContext.Session.Add("name", "value");
      

      HttpContext.Session["username"]="Value";
      

      【讨论】:

      • 这根本没有回答 OP 的问题。此外,.NET Core 中不再存在 Add 和括号 [] 方法。
      猜你喜欢
      • 2022-01-25
      • 2023-02-03
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      相关资源
      最近更新 更多