2015-04-22 18 views
19

verwenden Ich habe ein ASP.Net vNext-Projekt, das Sitzung verwendet. Aber ich bekomme diesen Fehler beim Versuch, Werte in der Sitzung zu erhalten/setzen.Kann Sitzung nicht in ASP.Net vNext Projekt

Eine Ausnahme des Typs ‚System.InvalidOperationException‘ aufgetreten in Microsoft.AspNet.Http.Core.dll wurde aber in Benutzercode

Zusätzliche Informationen nicht behandelt: Session wurde für diese Anwendung oder Anforderung nicht konfiguriert .

Hier ist mein Controller-Methode:

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

     return View(); 
    } 

ich das KVM-Paket "Microsoft.AspNet.Session": "1.0.0-beta3" in meiner project.json-Datei hinzugefügt haben, wie gut und habe meine Anwendung konfiguriert Sitzung über meine Startup.cs wie so zu verwenden:

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

Ich habe die vNext-Dokumentation auf Github angeschaut, aber es bietet nicht viele Informationen über ASP.Net-Sitzungen. Was mache ich falsch?

Antwort

21

Also habe ich das herausgefunden. Die Lösung war eigentlich ganz einfach. Da ASP.Net die Middlewares nacheinander in die Request-Pipeline einfügt, brauchte ich nur die Session-Middleware zu verwenden, bevor MVC verwendet wurde. Mehr Infos hier: https://stackoverflow.com/a/29569746/832546

Festcode:

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

dieses Ja war hilfreich. Ich habe gerade '' 'app.UseSession();' '' vor '' 'app.UseMvc();' '' – feradz

3

Es scheint, wie die Dinge noch einmal geändert und die bekannte ASP.NET-Sitzung muss anders in der rc1 konfiguriert werden. (Nr. UseInMemorySession() oder andere AppBuilder Methoden beziehen sich auf Session, jetzt wird es als Service hinzugefügt).

Im Allgemeinen muss Session installiert, konfiguriert und dann verwendet werden. All diese Schritte sind ziemlich neu und etwas ungewöhnlich. Außerdem hängt es von Cache:

Session auf der IDistributedCache gebaut ist, so müssen Sie diese auch konfigurieren, sonst wird eine Fehlermeldung angezeigt.

Das obige Zitat stammt aus ASP.NET 5 Docs. Alles, was Sie tun müssen, ist hier beschrieben: https://docs.asp.net/en/latest/fundamentals/app-state.html#installing-and-configuring-session.

15

Dank @acrhistof der Link geholfen.

Also, wenn Sie RC1 verwenden: fügen Sie diese diese Abhängigkeiten in project.json:

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

in Startup.cs Datei:

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

und

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

Verwenden Sie "Microsoft.AspNetCore.Session": "1.0.0", wenn Sie auf ASP.net sind ADER – jsgoupil

Verwandte Themen