趣味でいじるなら~とASP.NET Coreをちょっとだけ触ろうとしたのですが、速攻つまずきました。
TempDataを使いたくて以下のように書いたのですが、
public async Task<IActionResult> Index() { TempData["Hoge"] = "Fuga"; return View(); }
Sessionが設定されてないでぇと例外がスローされちゃいました。
TempDataが使用しているSessionに関する機能が標準ではインストールされてないようなので、下のように設定する必要があります。
パッケージをインストール
今までのようにパケージマネージャーコンソールから、パッケージをインストールします。
Install-Package Microsoft.Extensions.Caching.Memory -pre Install-Package Microsoft.AspNetCore.Session -pre
今はrc2ですが、rc1の時とパッケージ名が微妙に変わっている*1ので注意が必要です。
project.jsonを編集
もしくは、project.jsonを編集するのでもいいみたいです。
{ "dependencies": { ~略~ "Microsoft.AspNetCore.Session": "1.0.0-rc2-final", "Microsoft.Extensions.Caching.Memory": "1.0.0-rc2-final" },
お作法的にはどっちが正解なんでしょうね?個人的にはNuGetにお任せしたい感じ。
Startup.csでサービスを追加
Startup.csでSessionを使用すること、情報の格納先(キャッシュ)にメモリーを使用することを宣言します。
public void ConfigureServices(IServiceCollection services) { // AddMvcする前でもどこでも services.AddMemoryCache(); services.AddSession(); // Add framework services. services.AddMvc(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { ~略~ // UseMvcする前に書く app.UseSession(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
メモリー以外のキャッシュ
今回はSessionの格納先にメモリー(Microsoft.Extensions.Caching.Memory)を選択しましたが、それ以外にもRedisやSQLServerなんかも使えます。
SQLServer使う時の事は下のブログに書いてありそうな気がします。
参考情報
- Managing Application State — ASP.NET documentation
- Using Sessions and HttpContext in ASP.NET 5 and MVC6
- ViewData vs ViewBag vs TempData - 夜になったら寝る
*1:rc1ではMicrosoft.AspNet.Session