我正在实现自定义MembershipProvider,以便将登录详细信息传递给我们在公司其他几个地方使用的自定义业务对象。但是一旦我们进行了身份验证,我就想在会话中保存这个初始化的业务对象,以便稍后在其他页面中使用。让我举个例子。

public override bool ValidateUser(string username,string password)
{
    try
    {
        // I want to keep this "object" in the Session to be used later on
        CustomBusinessObject object = new CustomBusinessObject(username, password);

        return true;
    }
    catch (CustomBusinessAuthenticationException)
    {
        return false;
    }
}

我有办法做到这一点吗?我没有立即看到通过实现这个自定义MembershipProvider来访问Session对象的方法。

有帮助吗?

解决方案

您可以通过调用System.Web.HttpContext.Current来访问会话。只需在自定义成员资格提供程序上创建一个自定义属性,检查HttpContext.Current是否为null,如果是,则返回null,否则相应地访问会话值。

public object CustomObject
{
    get
    {
        if(System.Web.HttpContext.Current == null)
        {
            return null;
        }
        return System.Web.HttpContext.Current.Session["CustomObject"];
    }
    set
    {
        if(System.Web.HttpContext.Current != null)
        {
            System.Web.HttpContext.Current.Session["CustomObject"] = value;
        }
    }
}

其他提示

您应该能够访问 System.Web.HttpContext.Current.Session

请记住, System.Web.HttpContext 将是 null ,如果您的提供程序曾在ASP.Net管道之外使用过,并且在您的内部使用它提供商,您将把您的提供商紧密联系到ASP.Net。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top