1. ホーム
  2. asp.net-mvc

ASP.NET MVCでセッション状態を無効にするにはどうしたらいいですか?

2023-08-27 12:07:51

質問

私は、できるだけ多くの通常の HttpModules を削除し、セッション状態を無効にすることを含む、非常に軽量な ASP.NET MVC サイトを持ちたいと考えています。しかし、これを実行しようとすると、次のエラーが発生します。

The SessionStateTempDataProvider requires SessionState to be enabled.

web.configでセッションステートを無効にしています。

<sessionState mode="Off" />

ASP.NET MVCがTempDataのためにセッション状態を使用することは理解していますが、私はTempDataを必要としません/欲しいです - 私はちょうどセッション状態を無効にしたいです。助けてください!

どのように解決するのですか?

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());