문제

가능한 한 많은 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.

브래드 윌슨 (Brad Wilson)에 따르면, 이것은 MVC 2 미리보기에서 수정되었습니다 1. 여기 그리고 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top