Как отладить "System.ArgumentNullException" произошло в System.Core.dll, но не был обработан в коде пользователя "

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

Выдается ошибка:

Исключение типа "System.ArgumentNullException" произошло в System.Core.dll, но не было обработано в коде пользователя

Дополнительная информация: значение не может быть нулевым.

Код является:

[Route("ajax/addOrUpdateSource")]
[HttpPost]
public JsonResult AddOrUpdateSource(Source source, string html)
{
    var htmlDoc = new HtmlAgilityPack.HtmlDocument();
    htmlDoc.LoadHtml(html);

    var response = new Dictionary<string, object>();
    var labels = htmlDoc.DocumentNode.SelectNodes("//label");
    List<string> categories = new List<string>();
    string[] vals = new string[] { };

     for(int n = 1; n < labels.Count(); n++)
    {
        var label = labels[n].Attributes[0].Value;

        if (label.Contains( "btn") && label.Contains("btn-primary"))
            categories.Add(labels[n].InnerText.Trim());
    }

    response.Add("source", null);

    try
    {
        string catValues = String.Join(", ", categories.ToArray());

        source.LastUpdateDateTime = DateTimeOffset.UtcNow;
        source.LastUpdateUser = User.Identity.Name;
        source.ProductCategory = catValues;

        // save the source
        var updatedSource = _taskService.AddOrUpdateSource(source);

        // prepare the response
        response["source"] = updatedSource;
    }
    catch(Exception exc)
    {
        response.Add("error", exc.Message);
    }

    return Json(response);

Смотрите на скриншот ниже, чтобы точно определить, к чему Visual Studio прикрепляет ошибку во время отладки. (строка, содержащая "n

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

Обновления

РЕДАКТИРОВАТЬ 1 - после всего очень полезного ввода, приведенного ниже, стало ясно, что мне действительно нужно выяснить, почему приложение внезапно сообщает NULL для узлов меток. Теперь я могу предотвратить возникновение ошибки, но до того, как произошло это фантомное изменение, узлы меток никогда не были равны NULL, и выполнение завершилось так, как было задумано.

РЕДАКТИРОВАТЬ 2 - в соответствии с указаниями @mjwills вот код для функции, которая отправляет данные:

$scope.performSaveSource = function () {
        GlobalService.togglePleaseWait(true);

        $scope.source.SourceStatusId = $scope.source.SelectedSourceStatus.SourceStatusId;
        $scope.source.SourceStatus = $scope.source.SelectedSourceStatus.SourceStatusId;
        $scope.source.DataTypeId = $scope.source.SelectedDataType.DataTypeId;

        // pass the source and activity to be saved
        $http({
            url: "/ajax/addorupdatesource",
            method: "POST",
            data: {
                source: $scope.source,
                html: $('html').context.all["143"].innerHTML
            }
        })
        .then(function (response) {
            GlobalService.togglePleaseWait(false);

            if (response.status == 200) {
                if (response.data.error != null) {
                    alert(response.data.error);
                    return;
                }

                // update our local copies
                $scope.setSource(response.data.source);
            }
        });
    };

1 ответ

Код, возможно, не изменился, но, возможно, загружаемый HTML-документ не содержит узлов, соответствующих "// метке"

таким образом метки будут нулевыми, и вызов Count для этого вызовет

Другие вопросы по тегам