приведение объекта int к int дает нулевую ссылку - PullRequest
2 голосов
/ 14 марта 2012

Я уже несколько часов бьюсь головой об этой проблеме, и для меня это не имеет смысла.

Я создал приложение asp.net mvc 3, я реализовал формыаутентификация.У меня есть собственный провайдер, в котором я реализовал метод GetUser(..) и метод ValidateUser(...), а остальная часть реализации выдает не реализованное исключение

. Я могу предоставить свою регистрационную информацию для AccountController встраницу входа, и меня приветствует желаемое имя пользователя!Отлично, значит, логин работает.

Теперь у меня есть 3 действия на моем FooController

  • Индекс
  • FirstAction
  • SecondAction

Конкретные реализации выглядят следующим образом

[HttpPost]
public JsonResult FirstAction(int param1, string param2, string param3)
{
    var userID = (int)Membership.GetUser().ProviderUserKey;
    ...
}

[HttpPost]
public JsonResult SecondAction(int param1, int param2, string param3)
{
    var userID = (int)Membership.GetUser().ProviderUserKey;
    ...
}

Как вы уже догадались, я вызываю FirstAction и SecondAction из моего Index View с некоторыми функциями jQuery ajax.

Следующая строка выдает исключение нулевой ссылки:

var userID = (int)Membership.GetUser().ProviderUserKey;

Странно то, что только во SecondAction выбрасывается нулевая ссылка, вызов FirstAction работает нормально.

Я попытался разделить его следующим образом:

var user = Membership.GetUser(); 
var providerKey = user.ProviderUserKey; 
var userID = (int)providerKey. 

И все же он не может быть приведен.

Объект MembershipUser, который возвращает Membership.GetUser (..), имеет целое число, сохраненное в providerUserKey иНЕ является Руководством, как это имеет обычная реализация членства.

Любая помощь в любой форме или форме очень ценится.

Ответы [ 6 ]

8 голосов
/ 14 марта 2012

Debug!Что-то не то, что вы думаете!

var user = Membership.GetUser();
Debug.Assert(user != null);
var userKey = user.ProviderUserKey;
Debug.Assert(userKey != null);
var userID = (int)userKey;
3 голосов
/ 14 марта 2012

Таким образом, очевидно, что User не возвращено:

Membership.GetUser()

, кажется, возвращает ноль.И поэтому все последующие вызовы вызовут NullReferenceException.Он не имеет ничего общего с ключом Guid или «нет».

Проверьте, правильно ли вошел пользователь в систему при выполнении второго вызова.

ОБНОВЛЕНИЕ
Поскольку вы заявили, что пытались разделить его и приведение, вызвавшее проблему, ошибка должна находиться в поставщике.

Чтобы уменьшить ее, попробуйте получить значениев переменную перед тем, как пытаться ее привести:

var user = Membership.GetUser();
var userIDO = user.ProviderUserKey;
var userID = (int)userIDO;

Если во второй строке появляется NullReference, вы знаете, что с провайдером что-то не так.

0 голосов
/ 13 мая 2012

Идентификатор объекта MembershipUserobject относится к типу uniqueidentifier, поэтому попробуйте это

var userID = new GUID(user.ProviderUserKey.ToString());
0 голосов
/ 14 марта 2012

Убедитесь, что значение не равно нулю, и используйте

Convert.ToInt32(Membership.GetUser().ProviderUserKey)

вместо приведения к int, чтобы избежать проблем с боксом / распаковкой.

0 голосов
/ 14 марта 2012

Я полагаю, что либо ваш пользователь, либо ключ пользователя пустТак что вам просто нужно выполнить соответствующие проверки.

var user = Membership.GetUser();

if (user != null)
{
    object userKey = user.ProviderUserKey;

    if (userKey != null)
    {
        // Try convert the value to an int.

        // Do whatever.
    }
}
0 голосов
/ 14 марта 2012

Причиной во втором действии является param2, а не строка, как в первом действии, и он не может быть нулевым или пустым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...