MVC3提供了一个很好的机会,可以使用[SessionState(SessionStateBehavior.Disabled)]
属性制作无 session Controller 。很好,但又不灵活,因为您不能为每个 Controller 方法设置 session 状态,也不能按条件启用它。
是否可以仅通过身份验证的用户或通过其他自定义条件启用 session 状态?
即PHP具有强大的功能。if (!isset($_SESSION)) session_start();
找到那样的东西真好
最佳答案
您可以覆盖默认的 Controller 工厂,尤其是GetControllerSessionBehavior方法:
public class MyControllerFactory : DefaultControllerFactory
{
protected override SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
{
return SessionStateBehavior.Default;
}
if (requestContext.HttpContext.User.Identity.IsAuthenticated)
{
// enable session if there's an authenticated user
return SessionStateBehavior.Required;
}
return SessionStateBehavior.Disabled;
}
}
并在
Application_Start
中将默认 Controller 工厂替换为自定义 Controller 工厂:ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());