ASP.NET MVC에서 세션 상태를 비활성화하려면 어떻게해야합니까?
-
23-08-2019 - |
문제
가능한 한 많은 HTTPModules를 제거하고 세션 상태를 비활성화하는 것이 포함 된 매우 가벼운 ASP.NET MVC 사이트를 원합니다. 그러나이 작업을 시도하면 다음과 같은 오류가 발생합니다.
The SessionStateTempDataProvider requires SessionState to be enabled.
web.config에서 세션 상태를 비활성화했습니다.
<sessionState mode="Off" />
ASP.NET MVC는 TempData에 세션 상태를 사용하지만 TempData가 필요하지 않습니다. 세션 상태를 비활성화하고 싶습니다. 돕다!
해결책
당신은 당신의 자신의 컨트롤러를 만들 수 있고 더미 템포드 다타 타프로 바이더를 만들 수있다. 이 같은:
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();
}
}
구성을 통해 완전히 수행하는 방법을 크게 선호하지만 지금은 작동합니다.
간단한 문자열에 TempData를 사용해야하는 경우 MVCFutures에서 CookietEmpdataprovider를 사용할 수 있습니다. http://aspnet.codeplex.com/release/projectreleases.aspx?releaseid=24471.
제휴하지 않습니다 StackOverflow