66 votes

La session n'a pas été configurée pour cette application ou erreur de demande

Je suis tout nouveau à asp.net et récemment j'ai rencontré cette exception :

System.InvalidOperationException

Les détails de l'exception disent :

La session n'a pas été configurée pour cette application ou cette requête.

Voici l'extrait de code où cela se produit :

[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)); //C'est la ligne qui provoque l'exception.
                return new
                {
                    account = new
                    {
                        email = value.username
                    }
                };
            }
            throw new UnauthorizedAccessException("informations d'identification invalides");
        }

Je n'ai aucune idée de pourquoi cela se produit ou de ce que signifie réellement cette erreur. Quelqu'un pourrait-il s'il vous plaît expliquer ce qui pourrait en être la cause ?

1 votes

1 votes

Pour ASP NET Core 3.1 voir link

108voto

Austin Born Points 414

Dans votre Startup.cs, vous devrez peut-être appeler

app.UseSession avant app.UseMvc

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

Pour que cela fonctionne, vous devrez également vous assurer que le paquet nuget Microsoft.AspNetCore.Session est installé.

Mise à jour

Vous n'avez pas besoin d'utiliser app.UseMvc(); dans .NET Core 3.0 ou version ultérieure

1 votes

Oui, c'était une réponse acceptée à une question similaire.

0 votes

Cela a résolu le problème pour moi, j'avais réorganisé du code dans Startup.cs et oublié que l'ordre des opérations était sensible. Je souhaite que le message d'erreur du compilateur donne ce petit rappel.

4 votes

Services.AddSession();

22voto

Uttam Points 157

Le code suivant a fonctionné pour moi :

Configurer les services :

    public void ConfigureServices(IServiceCollection services)
    {
          //En mémoire
          services.AddDistributedMemoryCache();
          services.AddSession(options => {
          options.IdleTimeout = TimeSpan.FromMinutes(1);
          });              
          // Ajouter les services du framework.
          services.AddMvc();
     }

Configurer le pipeline de requête 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?}");
     });
 }

1 votes

A fonctionné pour moi dans l'application .net core.

0 votes

Le AddDistributedMemoryCahce est très important. Et l'ordre du AddSession et du UseSession est également important. Les options dans le AddSession ne sont pas nécessaires pour que cela fonctionne.

16voto

Giorgos Betsos Points 61197

J'obtenais exactement la même erreur dans mon application .NET Core 3.0 Razor Pages. Comme je n'utilise pas app.UseMvc(), la réponse proposée ne pouvait pas fonctionner pour moi.

Donc, pour toute personne se retrouvant ici avec le même problème en .NET Core 3.0, voici ce que j'ai fait à l'intérieur de Configure pour que cela fonctionne :

app.UseSession(); // utilisez ceci avant .UseEndpoints
app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); });

2 votes

Merci! Mettre la session avant les points de terminaison a également résolu le problème pour moi.

0 votes

Placer .UseSession() avant .UseEndpoints() a également fonctionné pour moi. Merci !

0voto

amd3 Points 304

Si vous avez ce problème et que votre démarrage est correctement configuré : Cette erreur est apparue pour moi lorsque j'ai oublié d'attendre une méthode asynchrone qui utilisait IHttpContextAccessor qui avait été injecté. En ajoutant await à l'appel, le problème a été résolu.

-2voto

Debashish Saha Points 181
HttpContext.Session.Add("nom", "valeur");

OU

HttpContext.Session["nom_utilisateur"]="Valeur";

1 votes

Cela ne répond pas du tout à la question de l'OP. De plus, la méthode Ajouter et les crochets [] n'existent plus dans .NET Core.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X