私はASP.NETを非常に使い始めており、Visual Studio 2015で作成しているWebアプリケーションの2つのコントローラー間でオブジェクトを渡そうとしています。WebアプリケーションはASP.Net 5プレビューテンプレートWebアプリケーションを使用しています(役立つ場合) 、私はベータコード7を使用していると思いますnot DNXコア用にビルドしています5)。
TempData変数にanythingを挿入しようとするたびに、プログラムがクラッシュしているように見えます。たとえば、「作成」メソッドでは次のようにします。
[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」オブジェクトを追加しようとしましたが、これはエラーに影響を与えませんでした。
私はどこでもこれの解決策を探していたので、どんな助けも非常に高く評価されます。私はそれがなんとか逃した愚かな/盲目的に明白な何かであることを望んでいます。
ASP.NET 5でセッション、キャッシュなどのミドルウェアを使用するには、明示的に有効にする必要があります。
セッションを有効にするには、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
がbefore MVC構成であることを確認してください。
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();
}