powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Найти ссылку без объекта
25 сообщений из 25, страница 1 из 1
Найти ссылку без объекта
    #39875770
saszay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Иногда появляется от посетителей сайта ошибка "Ссылка на объект не указывает на экземпляр объекта". У одних она есть, у других её нет. Просишь почистить кэш - ошибка уходит...
Как можно найти причину ошибки?
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875774
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saszayДобрый день!

Иногда появляется от посетителей сайта ошибка "Ссылка на объект не указывает на экземпляр объекта". У одних она есть, у других её нет. Просишь почистить кэш - ошибка уходит...
Как можно найти причину ошибки?
Если посетители сайта видят NullReferenceException у себя на странице, то вы тупо отдаёте им полную информацию об ошибке.
Вот и попросите сделать скриншот, там должно быть понятно в каком месте кода она происходит.

А по хорошему ошибки надо обрабатывать и логировать. Следить за их количеством.
И ни в коем случае не показывать посетителям.
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875775
saszay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий Мух,

А клиенту я их и не показываю. Мне приходит сообщение, что ошибка в контроллере. Но строка не указана и определить не могу причину. Тем более, что ошибка не у всех...
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875781
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saszayДмитрий Мух,

А клиенту я их и не показываю. Мне приходит сообщение, что ошибка в контроллере. Но строка не указана и определить не могу причину. Тем более, что ошибка не у всех...
Классно.
Советую расширить это своё сообщение необходимыми данными: включить туда Stack Trace, Inner Exceptions, данные о User Agent, о клиенте.
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875783
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saszay,

также ещё есть вариант удалённой отладки , или использования dnSpy
но это вам придётся сидеть и ждать, когда возникнет исключение
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875784
saszay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий Мух,

Message Ссылка на объект не указывает на экземпляр объекта.

stackTrace в CPS_MVC.Controllers.OrderController.NoStep(OtdelModelNoStep model)
в lambda_method(Closure , ControllerBase , Object[] )
в System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
в System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
в System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.b__1c()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.b__1e(IAsyncResult asyncResult)

Data System.Collections.ListDictionaryInternal

InnerException

Source CPS_MVC

TargetSite System.Web.Mvc.ActionResult NoStep(OtdelModelNoStep)
Client Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 YaBrowser/19.9.3.314 Yowser/2.5 Safari/537.36
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875788
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну показывай свой NoStep и OtdelModelNoStep

В любом случае, при написании веб-приложения нужно исходить из того, что тебе на от клиента могут придти ЛЮБЫЕ данные, в том числе те, которые, которые ты не предполагал. Так что не надо надеяться на то, что все поля модели у тебя будут заполнены не-null значениями.
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875790
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saszay Message Ссылка на объект не указывает на экземпляр объекта.

stackTrace в CPS_MVC.Controllers.OrderController.NoStep(OtdelModelNoStep model)
в lambda_method(Closure , ControllerBase , Object[] )
в System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
в System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
в System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
в System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.b__1c()
в System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.b__1e(IAsyncResult asyncResult)

Data System.Collections.ListDictionaryInternal

InnerException

Source CPS_MVC

TargetSite System.Web.Mvc.ActionResult NoStep(OtdelModelNoStep)
Client Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 YaBrowser/19.9.3.314 Yowser/2.5 Safari/537.36
Вот так бы сразу, только ещё номер строки должен присутсвовать, где конкретно произошло исключение в методе NoStep(OtdelModelNoStep model) класса OrderController.

Полностью всю информацию об ошибке покажите, ну и как просили выше: NoStep и OtdelModelNoStep.
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875791
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saszay,

вам кстати что присылает сообщение, что ошибка в контроллере?
Система мониторинга? Ваш собственный код приложения? Какая-то библиотека?
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875820
saszay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий Мух,

Ошибки ловлю фильтром из App_Start.
Контроллер:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
[HttpPost]
        public ActionResult NoStep(Otdel.OtdelModelNoStep model)
        {
            int kol = Basket.BasketQuantity(_worlUid);
            if (kol == 0)
            {
                SetMessage(0, EmptyBasketMessage);
                return RedirectToAction($"NoStep", $"Order");
            }

            byte worlStep = OrderL.OrderLStep2(_worlUid, Convert.ToByte(model.doID), 0, null, 0);
            if (worlStep == 3)
            {
                string viIp = System.Web.HttpContext.Current.Request.UserHostAddress;
                string viHost = UserSession.GetSessionString("host");
                long CellPhone = model.otPhoneCell;

                string worlDesc = model.otName + "<br/>" + "<a href=\"tel:+" + CellPhone + "\">" + CellPhone.ToString("000-000-00-00") + "</a>";
                if (!string.IsNullOrEmpty(model.WorlDesc.Trim()))
                    worlDesc += "<br/>" + Server.HtmlEncode(model.WorlDesc.Trim());

                long schlID = OrderL.OrderLStep4(_worlUid, viIp, viHost, worlDesc);
                if (schlID == 0L)
                    return RedirectToAction($"NoStep", $"Order");
                UserSession.SetSessionValue("schlID", schlID);
            }
            else
                return RedirectToAction($"NoStep", $"Order");

            return RedirectToAction($"NoStepFinish", $"Order");
        }


Модель:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public class OtdelModelNoStep
        {
            [Display(Name = "Где будете забирать:")]
            public string doID { get; set; }

            [Required(ErrorMessage = "не заполнено")]
            [RegularExpression(@"[А-ЯЁа-яё]+[А-ЯЁа-яё\s-]+[А-ЯЁа-яё]", ErrorMessage = "допустимы только русские буквы")]
            [Display(Name = "Как к Вам обращаться:")]
            public string otName { get; set; }

            [Required(ErrorMessage = "не указан")]
            [DataType(DataType.Currency)]
            //[RegularExpression(@"^(8|7)+[0-9]{10}$", ErrorMessage = "указан не корректно")]
            [Display(Name = "№ мобильного телефона:")]
            public long otPhoneCell { get; set; }

            [StringLength(500)]
            [DataType(DataType.MultilineText)]
            [Display(Name = "Примечания:")]
            public string WorlDesc { get; set; }
        }
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875824
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вишь, модель ты нигде не проверяешь. Ошибка может выпадать, к примеру, на model.WorlDesc.Trim()

Но тут еще много непонятно-постороннего типа Basket, _worlUid, что из них может быть null сказать сложно.

Извлекай номер строки
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875834
saszay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

А как его извлечь?
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875849
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saszayА как его извлечь?
Собрать с опцией генерации PDB-файлов и задеплоить с ними.
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875850
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя сервер в релизе, без отладочной информации?

Ну начни тогда с проверки модели (IsValid), у тебя же атрибуты навешаны на модель, что ты их не используешь?

И проверь на нулл
Код: c#
1.
model.WorlDesc?.Trim()

это сейчас самое подозрительное место. Тем более, что по коду и по атрибутам ты вроде бы допускаешь, что поле может быть null, однако все равно нарываешься на NRE.
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875858
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProУ тебя сервер в релизе, без отладочной информации?
Вполне можно сделать релизную сборку с PDB.
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875860
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proэто сейчас самое подозрительное место. Тем более, что по коду и по атрибутам ты вроде бы допускаешь, что поле может быть null, однако все равно нарываешься на NRE.
С учетом того, что совершенно нет проверки ModelState.IsValid подозрительными могут быть все места.
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875874
saszay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Спасибо, помогло.

А ведь стояла проверка string.IsNullOrEmpty. Почему она не срабатывала?
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875879
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saszayА ведь стояла проверка string.IsNullOrEmpty. Почему она не срабатывала?А причем тут IsNullOrEmpty? У тебя на Trim() падало
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875880
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatВполне можно сделать релизную сборку с PDB.можно
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875883
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatС учетом того, что совершенно нет проверки ModelState.IsValid подозрительными могут быть все места.я сказал САМОЕ подозрительное и оказался прав
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875912
saszay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А для общего развития (я не так давно в MVC):
поле ведь есть, просто в нём нет значений. В этом случае оно не передаётся?
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875928
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875940
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saszay,

используйте метод isNullOrWhiteSpace :
Код: c#
1.
2.
if (!string.isNullOrWhiteSpace(model.WorlDesc))
    worlDesc += "<br/>" + Server.HtmlEncode(model.WorlDesc.Trim());
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39875941
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с большой буквы только: IsNullOrWhiteSpace
...
Рейтинг: 0 / 0
Найти ссылку без объекта
    #39876042
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro https://docs.microsoft.com/ru-ru/aspnet/core/mvc/models/model-binding?view=aspnetcore-2.2
Кстати, могу ошибаться, но, кажется, в Коре немного все поменялось по сравнению с МВЦ5. Раньше value-type поле фейлилось, если его не было в HTTP, сейчас в него по умолчанию пишется дефолтное значение.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Найти ссылку без объекта
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]