Frage

Ich möchte eine sehr leichte ASP.NET MVC-Website haben, die so viele der üblichen Httpmodules wie möglich und Deaktivieren von Sitzungsstatus umfasst das Entfernen. Allerdings, wenn ich versuche, dies zu tun, ich die folgende Fehlermeldung erhalten:

The SessionStateTempDataProvider requires SessionState to be enabled.

Ich habe deaktiviert Sitzungszustand in web.config:

<sessionState mode="Off" />

Ich verstehe, dass ASP.NET MVC Sitzungsstatus für TempData verwendet, aber ich brauche nicht / will TempData - Ich will nur den Sitzungszustand deaktivieren. Hilfe!

War es hilfreich?

Lösung

Sie können Ihren eigenen Controller und DummyTempDataProvider machen. So etwas wie folgt aus:

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)
  {
  }
}

Und dann würden Sie müssen nur die Controller Factory auf App Startup registrieren - zum Beispiel Sie könnte dies in global.asax tun:

ControllerBuilder.Current.SetControllerFactory(new NoSessionControllerFactory());

Andere Tipps

Ich habe einen Weg gefunden, die ich vor allem ist es egal, für:

Erstellen 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
    }
}

Überschreiben Sie manuell die Provider im Controller

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

Ich würde sehr eine Art und Weise bevorzugen diese vollständig über die Konfiguration zu tun, aber das funktioniert jetzt.

Wenn Sie TempData für einfache Strings verwenden müssen, können Sie die CookieTempDataProvider in MvcFutures verwenden http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471 .

Nach Brad Wilson, wurde dies in MVC 2 Preview 1. Siehe Fest hier und hier .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top