Membership.GetUser(用户名) - 如何返回正确的套管?

时间:2009-06-16 13:37:04

标签: c# asp.net-membership

我从网址获取用户名,所以blah.com/kevinuk。

我希望页面上有一些内容可以说KevinUK是什么,它存储在会员资格表中,但是当我执行以下操作时,它会返回与输入内容相同的外壳。

MembershipUser member = Membership.GetUser(user);
string userName = member.UserName;

如何使用小写用户名作为参数并使用正确的大小写从数据库返回值?

3 个答案:

答案 0 :(得分:2)

不幸的是,Membership.GetUser(string username)方法只是将MembershipUser的用户名设置为传递参数的值。要获得正确的大小写,您需要使用Membership.GetUser(object providerUserKey),它接受​​用户的GUID,或覆盖前一个方法及其相应的存储过程以返回正确用户名。

或者,您可以简单地对两种不同的GetUser()方法进行背靠背调用,但这非常浪费。

答案 1 :(得分:1)

目前尚不清楚您使用的是哪个成员资格提供程序,但您可以轻松地从中继承并覆盖GetUser方法。

创建一个继承自MembershipProvider类的类。

public class MyMembershipProvider : MembershipProvider

{

    public MyMembershipProvider()

    {

        //

        // TODO: Add constructor logic here

        //

    }

}

覆盖getUser方法。

public override MembershipUser GetUser(string username, bool userIsOnline)

{
 ... Logic here to do a case insensitive lookup...

}

最后更新网络配置以使用新的提供商:

<system.web>
    <membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="10">
        <providers>
            <add name="MyMembershipProvider" type="Providers.FIFAMembershipProvider"     connectionStringName="ADConnectionString" ... />
        </providers>
    </membership>
</system.web>

一些例子:

http://www.eggheadcafe.com/tutorials/aspnet/30c3a27d-89ff-4f87-9762-37431805ef81/aspnet-custom-membership.aspx

http://msdn.microsoft.com/en-us/library/ms366730(VS.80).aspx

答案 2 :(得分:0)

对同样的问题进行了讨论并尝试了上述解决方案=获得正确套管的最简单方法:

var user = Membership.GetUser(userName.Text);
user = Membership.GetUser(user.ProviderUserKey);
var correctCasing = user.UserName;