2015-11-19 16 views
25

Sono molto nuovo ad ASP.NET e sto provando a passare un oggetto tra due controller in un'applicazione Web che sto facendo in Visual Studio 2015. L'applicazione web sta usando un ASP.Net 5 Anteprima dell'applicazione Web modello (se aiuta, penso di utilizzare il codice beta 7 e sono non creazione di DNX Core 5).Uso di Tempdata sta bloccando la mia applicazione

Il problema che sto riscontrando è ogni volta che provo a inserire nella variabile TempData, il programma sembra bloccarsi. Ad esempio, in un metodo "Crea" ho:

 [HttpPost] 
    public ActionResult Create(Query query) 
    { 
     switch (query.QueryTypeID) 
     { 
      case 1: 
       TempData["Test"] = "Test"; 
       return RedirectToAction("Index", "EventResults"); 
      case 2: 
       break; 
      default: 
       break; 
     } 
     return View(); 
    } 

In questo metodo, tento di aggiungere una semplice stringa di testo sotto il "test" chiave. Quando eseguo l'applicazione con questa istruzione TempData, ricevo un messaggio di errore che indica

Si è verificata un'eccezione non gestita durante l'elaborazione della richiesta.

InvalidOperationException: la sessione non è stata configurata per questa applicazione o richiesta. Microsoft.AspNet.Http.Internal.DefaultHttpContext.get_Session()

ho cercato di andare al Web.config situato nell'elemento wwwroot del progetto e l'aggiunta di un oggetto "sessionState" in un "system.web "elemento, ma questo non ha avuto alcun effetto sull'errore.

Qualsiasi aiuto sarebbe molto apprezzato perché ho cercato soluzioni per questo ovunque. Spero che sia qualcosa di stupido/accecantemente ovvio che in qualche modo mi è mancato.

+1

Avete aggiunto il pacchetto nuget 'Microsoft.AspNet.Session' e aggiunto il middleware di sessione nella classe' Startup'? – PHeiberg

+0

Scuse per il ritardo, Pheilberg.Ho provato ad aggiungere il pacchetto Nuget individualmente, e ha causato un sacco di strani errori ("iApplicationBuilder è definito in un pacchetto a cui non si fa riferimento" o qualcosa del genere), ma sto leggendo la risposta che hai lasciato e proverò tutto questo . Grazie mille per i suggerimenti e lo segnerò se funziona! – RMGT

+1

Se non riesci a farlo funzionare, controlla [esempio di sessione] (https://github.com/aspnet/Session/tree/dev/samples/SessionSample) in [Session Github Repo] (https://github.com/aspnet/Session/). Se ancora non riesci a farlo funzionare, pubblica il tuo codice 'project.json' e' Startup.cs'. – PHeiberg

risposta

37

Per utilizzare il middleware, come Session, Cache, ecc. In ASP.NET 5, è necessario attivarli esplicitamente.

sessione di abilitazione è fatto con l'aggiunta del pacchetto NuGet appropriata nella sezione dipendenze del file project.json (assicurarsi che la versione del pacchetto corrisponde alle versioni delle altre dipendenze che avete aggiunto):

"Microsoft.AspNet.Session": "1.0.0-*" 

e la sessione appropriata (cache) pacchetto immagazzinaggio così (come nell'esempio qui sotto: in memoria):

"Microsoft.Extensions.Caching.Memory": "1.0.0-*" 

e aggiungendo il middleware di risoluzione della dipendenza nella configurazione Startup.cs servizio:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddCaching(); 
    services.AddSession(/* options go here */); 
} 

e aggiungendo il middleware per OWIN nella configurazione Startup.cs OWIN:

public void Configure(IApplicationBuilder app) 
{ 
    app.UseSession(); 
    //... 

Assicurarsi che il UseSession viene prima la configurazione MVC.

+5

Il seguente è probabilmente vero, corretto? Per ASP.NET Core, in 'congfigurationServices (...)' sostituisci 'services.AddCaching();' wirh 'services.AddDistributedMemoryCache();' Ref: [Installazione e configurazione sessioni] (https://docs.microsoft. it/it-it/aspnet/core/fundamentals/app-state # installazione-e-configurazione-sessione) – nam

+1

Apparentemente il pacchetto di sessione è ora chiamato 'Microsoft.AspNetCore.Session'. Ha funzionato in modo immediato senza dover configurare la cache in memoria. –

5

Per Asp.Net Core, assicurarsi che sia aggiunto Asp.NetCore.Session. È possibile configurare la sessione in StartUp.cs come di seguito.

public void ConfigureServices(IServiceCollection services) 

    { 
     services.AddMvc(); 
     services.AddSingleton<ITempDataProvider, CookieTempDataProvider>(); 
     // Adds a default in-memory implementation of IDistributedCache. 
     services.AddDistributedMemoryCache(); 
     services.AddSession(options => 
     { 
      // Set a short timeout for easy testing. 
      options.IdleTimeout = TimeSpan.FromSeconds(10); 
      options.CookieHttpOnly = true; 
     }); 
    } 

    public void Configure(IApplicationBuilder app) 
    { 
     app.UseSession(); 
     app.UseMvcWithDefaultRoute(); 
    } 
Problemi correlati