Ich hätte gerne eine sehr leichte ASP.NET MVC-Site, die das Entfernen möglichst vieler üblicher HttpModules und das Deaktivieren des Sitzungsstatus umfasst. Wenn ich dies jedoch versuche, wird folgende Fehlermeldung angezeigt:
The SessionStateTempDataProvider requires SessionState to be enabled.
Ich habe den Sitzungsstatus in web.config deaktiviert:
<sessionState mode="Off" />
Ich verstehe, dass ASP.NET MVC den Sitzungsstatus für TempData verwendet, aber ich brauche / möchte TempData nicht - ich möchte nur den Sitzungsstatus deaktivieren. Hilfe!
asp.net-mvc
session-state
tempdata
Daniel Schaffer
quelle
quelle
Antworten:
Sie können Ihre eigene ControllerFactory und DummyTempDataProvider erstellen. Etwas wie das:
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 müssten Sie nur die Controller-Factory beim Start der App registrieren - z. B. könnten Sie dies in global.asax tun:
ControllerBuilder.Current.SetControllerFactory(new NoSessionControllerFactory());
quelle
Ich habe einen Weg gefunden, den ich nicht besonders mag:
Erstellen Sie 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 den Provider im Controller manuell
public class AuthController : Controller { public AuthController() { this.TempDataProvider = new NoTempDataProvider(); } }
Ich würde es sehr bevorzugen, dies vollständig über die Konfiguration zu tun, aber dies funktioniert vorerst.
quelle
Wenn Sie TempData für einfache Zeichenfolgen verwenden müssen, können Sie den CookieTempDataProvider in MvcFutures http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471 verwenden .
quelle
Laut Brad Wilson wurde dies in MVC 2 Preview 1 behoben. Siehe hier und hier .
quelle
Moderne Lösung:
Wenn Sie also keine Sitzung (oder TempData) verwenden, wird der Sitzungsstatus deaktiviert.
Quelle
quelle