扩展/自定义MembershipProvider的ValidateUser

时间:2014-02-25 17:41:51

标签: c# asp.net .net asp.net-membership membership-provider

我正在实施MembershipProvider课程。大多数方法都没有实现,我在那些方法中抛出NotImplementedException

但正在使用ValidateUser:

public override bool ValidateUser(string UserName, string Password)

现在我想要的是为它添加更多参数。这样的事情可以解决问题:

public override bool ValidateUser
    (
        string UserName,
        string Password,
        string IpAddress,
        string BrowserName
    )

这是一个例子。一旦我可以添加更多参数,我可以将它们组合在一个对象中,然后调用数据库层。

我搜索了很多但找不到合适的方法。有些人说不能这样做,有些人说它可以。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

实现自定义成员资格提供程序意味着您要覆盖成员资格提供程序的方法。

虽然您可以随意在自定义成员资格提供程序中创建自己的方法,但您将无法调用它。

如果您只想 IpAddress 浏览器,您可以在 ValidateUser 中使用 HttpContext.Current.Request `方法

public override bool ValidateUser(string username, string password)
{
   string ipAddress = HttpContext.Current.Request.UserHostAddress;
   string browser = HttpContext.Current.Request.Browser.Version;

   // Do something
}

答案 1 :(得分:0)

谢谢Win。除了IP和浏览器信息之外,我还需要更多参数。

我最终将所有内容(UserNamePassword,其他参数)放入XML并将其作为用户名发送。然后在password中,我有一个标志,看看它是否应该做一些不同的事情。

public override bool ValidateUser(string username, string password)
{
    if (password == "XML")
    {
        // This contains additional information in username.
        DatabaseLayerObject.ValidateUser(username);
    }
    else
    {
        // This is conventional call.
        DatabaseLayerObject.ValidateUser(username, password);
    }
}

更新1:

我正在添加更多信息以澄清我的回应。

除了usernamepassword之外,当我想发送更多信息时,我会将所有信息都放在XML中,并将此信息存储在username中。 E.g:

<UserName>MyUserName</UserName>
<Password>MyPassword</Password>
<City>NameOfCity</City>
<Country>NameOfCountry</Country>

现在我需要ValidateUser方法中的一些指示来了解我是否正在发送XML。此标志位于password中,存储为我选择的任何字符串。