BEACHSIDE BLOG

MicrosoftとかC#を好むレンジャーの個人的メモ

ASP.NET Core の TempData (ASP.NET Core 2.1 ~)

ASP.NET Core(2.1)で TempData の動作確認しようと思った際のにメモです。

メモ

初めて使うならドキュメント読むのが無難(そりゃそうだ....)。

環境

ASP.NET Core 2.1 と書いていますが、動作確認をした際の Nuget のバージョンは以下です。

  • Microsoft.AspNetCore.All : 2.1.0-preview1-final
  • Microsoft.NETCore.App : 2.1.0-preview1-26216-03

プロジェクトの作成

ASP.NET Core MVC のプロジェクトを作成して、C#のバージョンを7.1以上にしましょう(プロジェクトのプロパティ > ビルド > 詳細設定 で言語バージョンで設定するやつ)。言語バージョンを上げるのは、TmpData と直接は無関係で、後のサンプルコードで必要になるだけです。

ミドルウェアの設定

Startup.cs を開いて、 以下のように

  • ConfigureServices メソッドで2箇所
  • Configure メソッドで1箇所

コードを追加してミドルウェアを設定します。

f:id:beachside:20180306073143p:plain

ミドルウェアの設定は順序も重要になってくるので、そのあたりのエクセプションが出たり動作がおかしい時はドキュメントを確認しましょう(ってか使う前にまずドキュメントみるべきですかねw)。


TempData の利用

プリミティブな型しかあつかわないし今後もその予定っぽいことが GitHubの issue でも書いてあったので、ViewModel的なものを TempData で使いたいなら Json形式の文字列にして保存したり取り出して使う感じです。

今回は、動作確認用に以下のクラスを使います。

サクッと動作確認をしたかったので、HomeControllerで、無意味にリダイレクトするメソッド Redirect と、Index メソッドをこんな感じで書いてみました。

Redirect で TempData にデータを入れて、Index メソッドで取り出します。

デバッグしないと特になんの意味ももたない実装ですが、まぁ動作確認には十分ですね。 ブレークポイントを各メソッドにおいてデバッグ実行して、home/redirect にアクセスすると、TempData のやり取りが想定通りにできるのが確認できます。

拡張メソッド化

DRYにするのに、ITempDataDictionary の拡張メソッドを作ってしまいましょう。どこにでもありそうなやつですね。

(ここで C#7.1 の Default Literals が使いたかったので言語バージョンをアップデートしたってやつです。)

これで、Controller側はシンプルなコードになりますねー♪

参考

https://docs.microsoft.com/ja-jp/aspnet/core/fundamentals/app-state?tabs=aspnetcore2x#tempdata

Mvc/TempDataDictionary.cs at dev · aspnet/Mvc · GitHub