Как отладить "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 для этого вызовет