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());

07-26 05:15