3

TempDataは、単一ページのリクエスト間でのみ機能するように設計されていることを理解しています。しかし、意図した機能が壊れていると思う状況があると思います。

画像の配信には、ハンドラーよりもコントローラーを使用します。それがベストプラクティスであるかどうかは今はわかりませんが、私にとっては非常にうまく機能します。ただし、問題は、画像アクションの1つを呼び出すたびに、明らかにTempDataクレジットが消費されることです。

MVCに「このコントローラー/アクションは通常のページリクエストの範囲外です」と言う方法はありますか?したがって、TempDataを永続化するか、TempDataライフサイクルから完全に削除しますか?

リッチ

4

3 に答える 3

3

私の解決策は、ページ リクエスト間で TempData を保持する属性を作成することでした。これに対する私の最初の反応は「うんざり」ですが、属性で装飾されたコントローラーを TempData ライフサイクルから効果的に除外したいと考えています。

using System.Web.Mvc;

namespace K3R.Web.Mvc.Filters {
    public sealed class PersistTempDataAttribute : ActionFilterAttribute {
        public PersistTempDataAttribute() { }

        public override void OnActionExecuting(ActionExecutingContext filterContext) {
            var tempData = filterContext.Controller.TempData;
            if (tempData == null || tempData.Count == 0)
                return;

            string[] keys = new string[tempData.Keys.Count];
            tempData.Keys.CopyTo(keys, 0);
            foreach (var key in keys)
                tempData[key] = tempData[key];
        }
    }
}

より良い解決策に関するフィードバックをいただければ幸いです。

リッチ

于 2009-11-03T14:08:03.277 に答える
0

私はMVCにかなり慣れていないので、これに対する正確な答えはわかりません。ただし、AJAX リクエストで TempData を強制終了する前に、AJAX リクエストで問題が発生したという話を聞いたことがあります。

この情報を保存するために、独自のセッション ベースのシステムを実装できると思いますか?

ただし、他の誰かがすぐにあなたのためのより完全な答えを持っていると確信しています!

于 2009-11-03T11:39:54.777 に答える
-1

私はそれを行う方法とその理由を完全には理解していませんが、ハンドラーを使用したいと思います. または、コントローラーのアクションに固執する場合、オンザフライで画像を配信する際に問題なく機能し、コントローラーのアクションで FileContentResult を使用したと言えます。

このような:

        return File(imageBytes, imageType);

データストアまたはどこかからバイトを取得します..

それが役に立てば幸い

于 2009-11-03T12:02:23.447 に答える