是否可以仅在 ASP.NET MVC 中为经过身份验证的用户启用会话状态?

Che*_*rek 3 session session-state asp.net-mvc-3

MVC3 添加了使用属性创建无会话控制器的好机会[SessionState(SessionStateBehavior.Disabled)]。这很好,但不灵活,因为您无法为每个控制器方法设置会话状态,也无法按条件启用它。

是否可以仅为经过身份验证的用户或通过其他自定义条件启用会话状态?即PHP有一个很棒的功能。 if (!isset($_SESSION)) session_start(); 找到类似的东西就好了

Dar*_*rov 5

您可以覆盖默认控制器工厂,更具体地说是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;
    }
}
Run Code Online (Sandbox Code Playgroud)

并将Application_Start默认控制器工厂替换为自定义控制器工厂:

ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
Run Code Online (Sandbox Code Playgroud)