我可以在自定义MembershipProvider中向用户会话添加内容吗?
-
05-07-2019 - |
题
我正在实现自定义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。
不隶属于 StackOverflow