我从网址获取用户名,所以blah.com/kevinuk。
我希望页面上有一些内容可以说KevinUK是什么,它存储在会员资格表中,但是当我执行以下操作时,它会返回与输入内容相同的外壳。
MembershipUser member = Membership.GetUser(user);
string userName = member.UserName;
如何使用小写用户名作为参数并使用正确的大小写从数据库返回值?
答案 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://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;