2015-11-19 8 views
25

私はASP.NETを使い始めたばかりで、Visual Studio 2015で作成しているWebアプリケーションの2つのコントローラ間でオブジェクトを渡そうとしています.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(); 
    } 

この方法では、単純なテスト文字列をキー "test"の下に追加しようとします。そのTempDataステートメントでアプリケーションを実行すると、エラーメッセージが表示されます。

要求の処理中に未処理の例外が発生しました。

InvalidOperationException:このアプリケーション>または要求に対してセッションが構成されていません。 Microsoft.AspNet.Http.Internal.DefaultHttpContext.get_Session()

私はプロジェクトのwwwrootの要素にあるWeb.configファイルに行くと「のsystem.webに「てsessionState」オブジェクトを追加しようとしています"要素であるが、これはエラーに何の影響も与えなかった。

私はどこでもこのソリューションを探していたので、どんな助力も非常に高く評価されました。私は何とか見逃してしまった、愚か/盲目的なものであると思っています。

+1

'Microsoft.AspNet.Session'ナゲットパッケージを追加し、セッションミドルウェアを' Startup'クラスに追加しましたか? – PHeiberg

+0

遅延の申し立て、Pheilberg。そのNugetパッケージを個別に追加しようとしましたが、奇妙なエラー(「iApplicationBuilderは参照されていないパッケージで定義されています」など)が発生しましたが、残った答えを読んでいます。提案してくれてありがとう、それが動作すれば私はそれをマークします! – RMGT

+1

動作しない場合は、[セッションGithub Repo](https:/ /セッション/ /github.com/aspnet/Session/)。それでも動作しない場合は、 'project.json'と' Startup.cs'コードを投稿してください。 – PHeiberg

答えて

37

ASP.NET 5でセッション、キャッシュなどのミドルウェアを使用するには、明示的に有効にする必要があります。

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

と適切なセッション:

有効セッションは、あなたのproject.jsonファイルの依存関係のセクションの適切なnugetパッケージを追加することによって行われます(パッケージのバージョンは、他のあなたが追加した依存関係のバージョンと一致することを確認してください) (以下の例のように、メモリ内)ならびに(キャッシュ)ストレージ・パッケージ:

"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コアの場合、 'congfigurationServices(...)'に 'services.AddCaching();' wirh 'services.AddDistributedMemoryCache();' Ref:[インストールと設定セッション](https://docs.microsoft。 com/en-us/aspnet/core/fundamentals/app-state#インストールと設定のセッション) – 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(); 
    } 
関連する問題