2015-04-22 8 views
19

Mam projekt ASP.Net vNext, który używa sesji. Ale otrzymuję ten błąd podczas próby pobrania/ustawienia wartości w sesji.Nie można użyć sesji w projekcie ASP.Net vNext

Wyjątek typu „System.InvalidOperationException” wystąpił w Microsoft.AspNet.Http.Core.dll ale nie było obsługiwane w kodzie użytkownika

Dodatkowe informacje: Sesja nie została skonfigurowana do tego wniosku lub żądania .

Oto moja metoda kontroler:

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

     return View(); 
    } 

dodałem pakiet KVM "Microsoft.AspNet.Session": "1.0.0-beta3" w moim pliku project.json jak dobrze i skonfigurowany mojej aplikacji do korzystania z sesji za pośrednictwem mojego Startup.cs tak:

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

Sprawdziłem dokumentację vNext na Githubie, ale nie zawiera ona wielu informacji na temat sesji ASP.Net. Co ja robię źle?

Odpowiedz

21

Więc wymyśliłem to. Poprawka była właściwie prosta. Ponieważ program ASP.Net dodaje sekwencje middleware do potoku żądania, wszystko, co musiałem zrobić, to użyć oprogramowania pośredniego sesji przed użyciem MVC. Więcej informacji tutaj: https://stackoverflow.com/a/29569746/832546

kod Poprawiono:

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

Tak to było pomocne. Właśnie przeniosłem '' 'app.Usuwanie();' '' przed '' 'app.UżywanieMvc();' '' – feradz

3

Wydaje się, że wszystko się zmieniło po raz kolejny i znany sesji ASP.NET ma być różnie skonfigurowane w RC1. (no UseInMemorySession() lub inne metody są powiązane z Session, teraz są dodawane jako usługa).

Ogólnie rzecz biorąc Session musi być zainstalowany, skonfigurowany, a następnie użyty. Wszystkie te kroki są całkiem nowe i nieco niezwykłe. Co więcej, to zależy od Cache:

sesja jest zbudowany na szczycie IDistributedCache, więc trzeba skonfigurować to jak dobrze, w przeciwnym razie zostanie wyświetlony komunikat o błędzie.

Powyższy cytat pochodzi z dokumentów ASP.NET 5. Wszystko, co musisz zrobić, jest opisane tutaj: https://docs.asp.net/en/latest/fundamentals/app-state.html#installing-and-configuring-session.

15

Dzięki @acrhistof pomógł link.

Więc jeśli używasz RC1: dodać to tych zależności w project.json:

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

w pliku Startup.cs:

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

i

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

Użyj "Microsoft.AspNetCore.Session": "1.0.0", jeśli używasz ASP.net RDZEŃ – jsgoupil