2015-11-19 18 views
25

我對ASP.NET很陌生,試圖在我在Visual Studio 2015中製作的Web應用程序中的兩個控制器之間傳遞對象。該Web應用程序正在使用ASP.Net 5預覽模板Web應用程序(如果有幫助,我認爲我正在使用測試代碼7,並且我是而不是爲DNX Core 5構建)。使用Tempdata正在崩潰我的應用程序

我遇到的問題是每當我嘗試將任何東西插入TempData變量時,程序似乎崩潰。例如,在「創建」的方法,我有:

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

在該方法中,我嘗試下的關鍵「測試」添加一個簡單的測試字符串。當我在那裏運行帶有TempData語句的應用程序時,我收到一條錯誤消息,指出

處理請求時發生未處理的異常。

InvalidOperationException:尚未爲此應用程序>或請求配置會話。 Microsoft.AspNet.Http.Internal.DefaultHttpContext.get_Session()

我試圖要位於該項目的wwwroot的元件的Web.config並添加「的sessionState」對象到一個「的System.Web 「元素,但這對錯誤沒有影響。

任何幫助將非常讚賞,因爲我一直在尋找各地的解決方案。我希望這是愚蠢的/盲目明顯的,我不知何故錯過了。

+1

您是否添加了'Microsoft.AspNet.Session' nuget包並在'Startup'類中添加了會話中間件? – PHeiberg

+0

延遲道歉,Pheilberg。我嘗試過單獨添加Nuget包,並且它導致了一堆奇怪的錯誤(「iApplicationBuilder被定義在未被引用的包中」或類似的東西),但是我正在閱讀你留下的答案,並將嘗試所有這些。非常感謝這些建議,如果它有效,我會將其標記出來! – RMGT

+1

如果您無法使用它,請查看[Session Github Repo](https://https://github.com/aspnet/Session/tree/dev/samples/SessionSample)中的[會話示例] /github.com/aspnet/Session/)。如果你仍然無法工作,請發佈你的'project.json'和'Startup.cs'代碼。 – PHeiberg

回答

37

爲了在ASP.NET 5中使用中間件,例如Session,Cache等,您必須明確地啓用它們。

啓用會話由您project.json文件的依賴關係部分添加適當的NuGet包進行(確保軟件包版本所添加的其他依賴的版本匹配):

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

和相應的會話(高速緩衝存儲器)存儲包以及(如下面的例子;在存儲器中):

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

以及將所述中間件在Startup.cs服務配置依賴分辨率:

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

,並添加在Startup.cs OWIN配置中間件OWIN:

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

確保UseSession而來的MVC配置之前

+5

以下內容可能是真的,對嗎?對於ASP.NET Core,在'congfigurationServices(...)'中替換'services.AddCaching();'wirh'services.AddDistributedMemoryCache();'參考:[安裝和配置會話](https://docs.microsoft.com/en-us/downloads/default.aspx)。 com/en-us/aspnet/core/fundamentals/app-state#installed-and-configuration-session) – nam

+1

顯然會話包現在被稱爲'Microsoft.AspNetCore.Session'。它不需要設置內存中的緩存即可使用。 –

5

對於Asp.Net Core,請確保已添加Asp.NetCore.Session。 您可以在下面的StartUp.cs中配置會話。

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