asp.net-mvc - not - session mvc net core
¿Cómo puedo desactivar el estado de la sesión en ASP.NET MVC? (4)
He encontrado una forma, que no me interesa especialmente:
Crear 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
}
}
Sobrescribir manualmente al proveedor en el controlador
public class AuthController : Controller
{
public AuthController()
{
this.TempDataProvider = new NoTempDataProvider();
}
}
Preferiría mucho una manera de hacer esto completamente a través de la configuración, pero esto funciona por ahora.
Me gustaría tener un sitio ASP.NET MVC muy liviano que incluye eliminar tantos HttpModules habituales como sea posible y deshabilitar el estado de la sesión. Sin embargo, cuando trato de hacer esto, aparece el siguiente error:
The SessionStateTempDataProvider requires SessionState to be enabled.
He desactivado el estado de la sesión en web.config:
<sessionState mode="Off" />
Entiendo que ASP.NET MVC usa el estado de la sesión para TempData, pero no necesito / quiero TempData: solo quiero deshabilitar el estado de la sesión. ¡Ayuda!
Podrías crear tu propia ControllerFactory y DummyTempDataProvider. Algo como esto:
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)
{
}
}
Y entonces solo necesitaría registrar la fábrica del controlador al inicio de la aplicación; por ejemplo, podría hacerlo en global.asax:
ControllerBuilder.Current.SetControllerFactory(new NoSessionControllerFactory());
Si necesita usar TempData para cadenas simples, puede usar el CookieTempDataProvider en MvcFutures http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471 .