2015-04-22 6 views
19

Ho un progetto vNext ASP.Net che utilizza Session. Ma sto ricevendo questo errore durante il tentativo di ottenere/impostare valori nella sessione.Impossibile utilizzare la sessione in ASP.Net vNext Project

Un'eccezione di tipo 'System.InvalidOperationException' in Microsoft.AspNet.Http.Core.dll, ma non è stata gestita nel codice utente

Ulteriori informazioni: sessione non è stato configurato per questa applicazione o richiesta .

Ecco il mio metodo di controllo:

[AllowAnonymous] 
    [HttpGet("/admin")] 
    public IActionResult Index() 
    { 
     if (Context.Session.GetString("UserName") == null) // error thrown here 
     { 
      return RedirectToAction("Login"); 
     } 

     return View(); 
    } 

ho aggiunto il pacchetto KVM "Microsoft.AspNet.Session": "1.0.0-beta3" nel mio file project.json come bene e ho configurato la mia applicazione per utilizzare la sessione tramite il mio Startup.cs in questo modo:

public void ConfigureServices(IServiceCollection services) 
{ 
    // code removed for brevity 
    services.AddCachingServices(); 
    services.AddSessionServices(); 
} 

public void Configure(IApplicationBuilder app) 
    { 
     app.UseMvc(); 
     app.UseInMemorySession(configure: s => s.IdleTimeout = TimeSpan.FromMinutes(30)); 
    } 

Ho esaminato la documentazione vNext su Github ma non fornisce molte informazioni sulle sessioni ASP.Net. Che cosa sto facendo di sbagliato?

risposta

21

Quindi ho capito. La soluzione era abbastanza semplice in realtà. Poiché ASP.Net aggiunge i middleware in sequenza nella pipeline della richiesta, tutto ciò che dovevo fare era usare il middleware di sessione prima di utilizzare MVC. Maggiori informazioni qui: https://stackoverflow.com/a/29569746/832546

codice fisso:

public void Configure(IApplicationBuilder app) 
{ 
    app.UseInMemorySession(configure: s => s.IdleTimeout = TimeSpan.FromMinutes(30)); 
    app.UseMvc(); 
} 
+1

Sì questo è stato utile. Ho appena spostato '' 'app.UseSession();' '' prima di '' 'app.UseMvc();' '' – feradz

3

Sembra che le cose sono cambiate ancora una volta e la sessione di ASP.NET noto deve essere configurato in modo diverso nella RC1. (no UseInMemorySession() o altri metodi AppBuilder sono relativi a Session, ora viene aggiunto come servizio).

In generale Session deve essere installato, configurato e quindi utilizzato. Tutti questi passaggi sono abbastanza nuovi e in qualche modo insoliti. Inoltre, dipende da cache:

sessione è costruito sulla base di IDistributedCache, quindi è necessario configurare questo pure, altrimenti si riceverà un errore.

La citazione di cui sopra è da ASP.NET 5 documenti. Tutto ciò che devi fare è descritto qui: https://docs.asp.net/en/latest/fundamentals/app-state.html#installing-and-configuring-session.

15

Grazie a @acrhistof il collegamento ha aiutato.

Quindi, se si utilizza RC1: aggiungere questo queste dipendenze in project.json:

"Microsoft.AspNet.Session": "1.0.0-rc1-final", 
"Microsoft.Extensions.Caching.Memory": "1.0.0", 

in Startup.cs di file:

public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddCaching(); 
     services.AddSession(); 
     services.AddMvc(); 
    } 

e

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
    app.UseSession(); //outside of dev if (env.IsDevelopment()) 
    .... 
    } 
+3

Usa "Microsoft.AspNetCore.Session": "1.0.0" se sei su ASP.net NUCLEO – jsgoupil