Rehman2803 Ответов: 2

Indexoutofrangeexception: индекс находился вне границ массива


Привет,

Я получаю ниже ошибки
IndexOutOfRangeException: Index was outside the bounds of the array
при вызове идентификатора электронной почты из Active Directory, вот код и следует ошибка
string propertyName = "mail";
               string User = HttpContext.Current.User.Identity.Name; // System.Environment.UserName;

               string[] Name = Regex.Split(User.Trim(), @"\\");
               string username = Name[1];
               //string domainname = HttpReq//System.Environment.UserDomainName.ToString().ToLower();
               string domainname = Name[0]; //"AsiaPacific";
               DirectoryEntry entry = new DirectoryEntry("LDAP://DC=" + domainname + ",DC=cpqcorp,DC=net");
               DirectorySearcher search = new DirectorySearcher(entry);
               search.Filter = "(&(&(objectClass=user)(SamAccountName=" + username + ")))";
               search.PropertiesToLoad.Add(propertyName);
               SearchResult result = search.FindOne();
               string propertyValue = "";
               if (result != null)
               {
                   propertyValue = result.Properties[propertyName][0].ToString();
                   //propertyValue = result.Properties.Count.ToString();

               }
               return propertyValue;
Exception Error:
[IndexOutOfRangeException: Index was outside the bounds of the array.]
   clsCommon.DisplayName()


Это происходит, когда я запускаю инструмент в Pro server, который не входит, если я запускаю локальный. Пожалуйста помогите мне так как это очень срочно

[no name]

Нет, это совсем не срочно. Почему вы предполагаете, что имя вообще содержит что-то, гораздо меньше, чем одна строка в массиве?

Sergey Alexandrovich Kryukov

В каком направлении?
Используйте отладчик, и вы увидите. Проблема очень проста.
—СА

Rehman2803

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

Sergey Alexandrovich Kryukov

Это настолько простой метод отладки, что каждый должен уметь им пользоваться. Никто не будет отлаживать ваш код для вас.
Кроме того, вы можете получить эту информацию из стека исключений.
Я ответил на твой вопрос.
—СА

Rehman2803

решил сам, изменил аутентификацию в Pro server, с анонимной на Windows authentication, спасибо за ваше время

2 Ответов

Рейтинг:
2

Sergey Alexandrovich Kryukov

Вы не указали строку, в которой было вызвано это исключение, но это может быть любое место, где вы индексируете массивы: Name[0], Name[1] и result.Properties[propertyName][0] Вы никогда не проверяете, существует ли 0-й или 1-й элемент. Вам нужно проверить, что массив имеет хотя бы один или два элемента.
Кроме того, вам нужно проверить, что элемент result.Properties[propertyName] существует.

—СА


Rehman2803

результат.Свойства[propertyName][0] получение идентификатора электронной почты, как и ожидалось, и эта ошибка не приходит, если я запускаю в локальном режиме, только в Pro server я получаю то же самое.
Я не могу найти строку, так как она работала, если я поставил debug. Но в опубликованном сервере он выбрасывается как исключение

Sergey Alexandrovich Kryukov

По крайней мере, исправьте ошибки, которые я указал в своем ответе. Подумайте о том, чтобы принять ответ формально (зеленая кнопка "принять").
—СА

Рейтинг:
11

Rehman2803

Изменения проверки подлинности в Про сервере, с анонимной проверке подлинности Windows