Program Tip

ASP.NET MVC에서 세션 상태를 비활성화하려면 어떻게해야합니까?

programtip 2020. 10. 17. 12:03
반응형

ASP.NET MVC에서 세션 상태를 비활성화하려면 어떻게해야합니까?


가능한 한 많은 일반적인 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());

특별히 신경 쓰지 않는 한 가지 방법을 찾았습니다.

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

I would greatly prefer a way to do this completely via the configuration, but this works for now.


If you need to use TempData for simple strings, you can use the CookieTempDataProvider in MvcFutures http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471.


According to Brad Wilson, this has been fixed in MVC 2 Preview 1. See here and here.

참고URL : https://stackoverflow.com/questions/884852/how-can-i-disable-session-state-in-asp-net-mvc

반응형