77

非常に軽量なASP.NETMVCサイトが必要です。これには、通常のHttpModuleをできるだけ多く削除し、セッション状態を無効にすることが含まれます。ただし、これを実行しようとすると、次のエラーが発生します。

The SessionStateTempDataProvider requires SessionState to be enabled.

web.configでセッション状態を無効にしました:

<sessionState mode="Off" />

ASP.NET MVCがTempDataにセッション状態を使用することは理解していますが、TempDataは必要ありません。セッション状態を無効にしたいだけです。ヘルプ!

4

5 に答える 5

48

独自のControllerFactoryとDummyTempDataProviderを作成できます。このようなもの:

public class NoSessionControllerFactory : DefaultControllerFactory
{
  protected override IController GetControllerInstance(Type controllerType)
  {
    var controller = base.GetControllerInstance(controllerType);
    ((Controller) controller).TempDataProvider = new DummyTempDataProvider();
    return controller;
  }
}


public class DummyTempDataProvider : ITempDataProvider
{
  public IDictionary<string, object> LoadTempData(ControllerContext controllerContext)
  {
    return new Dictionary<string, object>();
  }

  public void SaveTempData(ControllerContext controllerContext, IDictionary<string, object> values)
  {
  }
}

次に、アプリの起動時にコントローラーファクトリを登録する必要があります。たとえば、global.asaxでこれを行うことができます。

ControllerBuilder.Current.SetControllerFactory(new NoSessionControllerFactory());
于 2009-05-19T20:40:46.730 に答える
9

私は特に気にしない1つの方法を見つけました:

NoTempDataProviderを作成します

using System;
using System.Collections.Generic;
using System.Web.Mvc;

namespace Facebook.Sites.Desktop.Auth.Models
{
    public class NoTempDataProvider : ITempDataProvider
    {
        #region [ ITempDataProvider Members ]

        public IDictionary<String, Object> LoadTempData(ControllerContext controllerContext)
        {
            return new Dictionary<String, Object>();
        }

        public void SaveTempData(ControllerContext controllerContext, IDictionary<String, Object> values) { }

        #endregion
    }
}

コントローラのプロバイダーを手動で上書きする

public class AuthController : Controller
{
    public AuthController()
    {
        this.TempDataProvider = new NoTempDataProvider();
    }
}

構成を介してこれを完全に行う方法を強く望んでいますが、これは今のところ機能します。

于 2009-05-19T20:37:53.350 に答える
6

単純な文字列にTempDataを使用する必要がある場合は、MvcFutureshttp://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471のCookieTempDataProviderを使用できます

于 2009-08-28T15:40:35.603 に答える
1

Brad Wilsonによると、これはMVC 2Preview1で修正されています。ここここを参照してください。

于 2009-08-28T23:44:29.753 に答える
0

最新のソリューション:

ASP.NETでは、Sessionオブジェクトを使用してデータを格納しない場合、またはSessionイベント(Session_OnStartまたはSession_OnEnd)のいずれかが処理される場合、セッション状態は無効になります。

したがって、Session(またはTempData)を使用しないと、SessionStateが無効になります。

ソース

于 2020-05-02T22:35:45.857 に答える