Членство.GetUser (username) - как вернуть правильный корпус?


Я получаю имя пользователя из URL, так что blah.com/kevinuk.

Я хочу, чтобы некоторый контент на странице говорил KevinUK, который хранится в таблице членства, но когда я делаю следующее, он возвращает тот же самый корпус, что и вход.

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

Как я могу использовать имя пользователя в нижнем регистре в качестве параметра и возвращать значение из базы данных с правильным регистром?

3 4

3 ответа:

Неясно, какой поставщик членства вы используете, но вы можете легко перейти от него и переопределить метод 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

К сожалению, метод Membership.GetUser(string username) просто устанавливает имя пользователя MembershipUser в значение передаваемого параметра. Чтобы получить правильный корпус, вам нужно либо использовать Membership.GetUser(object providerUserKey), который принимает GUID пользователя, либо переопределить первый метод и соответствующую хранимую процедуру, чтобы вернуть имя пользователя в правильном корпусе.

Или, вы можете просто сделать обратные вызовы к двум различным методам GetUser(), но это довольно расточительно.

Наткнулся на ту же проблему и попробовал выше решение = Самый простой способ получить правильный корпус:

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