ASP.NET MVC 2では、のエントリの有効期間はTempDataDictionary
1つのHTTP要求のみでした。
これは、1つのリクエストに値を設定し、リダイレクトし、行のもう一方の端にある同じアイテムにアクセスできるようにすることを意味します。この後、行の最後にあるディクショナリから値を読み取るかどうかに関係なく、エントリは使用できなくなります。
ASP.NET MVC 3(私は信じています)以来、この実装の詳細はかなり大幅に変更されました。
のエントリは、TempDataDictionary
読み取られた後にのみ削除されるようになりました。
MVC 4
public object this[string key]
{
get
{
object obj;
if (!this.TryGetValue(key, out obj))
return (object) null;
this._initialKeys.Remove(key);
return obj;
}
}
と
public bool TryGetValue(string key, out object value)
{
this._initialKeys.Remove(key);
return this._data.TryGetValue(key, out value);
}
MVC 2:
public object this[string key] {
get {
object value;
if (TryGetValue(key, out value)) {
return value;
}
return null;
}
と
public bool TryGetValue(string key, out object value) {
return _data.TryGetValue(key, out value);
}
ほとんどの人はTempData
、1つのリクエストでアイテムをコレクションに入れ、すぐに次のリクエストでそれらを読み戻すように見えるため、機能はほぼ同じように見えます。
TempData
ある場所にリダイレクトされた場合にエントリを読み取りたい場合や、他のリソースを要求して戻った場合にエントリが削除されることを期待する場合など、これが当てはまらないシナリオでは、この変更は大きな影響を及ぼします。
1つのhttpリクエストで使用できるエントリはなくなりましたが、ディクショナリの1つのgetでのみ使用できるため、多くのHTTPリクエストで使用できます。
この含意の変更についてもっと知りたいのですが、変更の理由は何でしたか、これは単に複数のリダイレクトに対応するためでしたか、それともより深いメリットがありますか?
TempData
それに続いて、以前と同じ方法でデータの単一のHTTPリクエスト共有に対応するものが組み込まれているのかどうか知りたいと思っています。